IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème passage par références


Sujet :

C++

  1. #1
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut Problème passage par références
    Bonjour à tous!

    Bon voici mon problème : j'ai une classe CVector2 dont voici le code (juste un morceau)

    #ifndef __CVector2_H__
    #define __CVector2_H__

    #include <math.h>
    #include "SLEType.h"

    //Classe de gestion des vecteurs dans l'espace 2D
    namespace SLE
    {
    class CVector2
    {
    public:
    //Constructeur par défaut, initialise le vecteur à 0
    CVector2():m_x(0), m_y(0){}

    //Constructeur surchargé, initialise le vecteur avec les composants donnés
    CVector2(const real x, const real y):m_x(x), m_y(y){}

    ~CVector2();

    //Inverse les composants du vecteur
    void invert()
    {
    m_x = -m_x;
    m_y = -m_y;
    }

    //Retourne la magnitude du vecteur
    real magnitude()const
    {
    return sqrtf(m_x*m_x + m_y*m_y);
    }

    private:
    real m_x;
    real m_y;
    };
    }

    #endif

    J'ai aussi une classe CSurface qui gère les sprites 2D (voici le fichier.h)

    #ifndef __CSurface_H__
    #define __CSurface_H__

    #include "CVector2.h"

    namespace SLE
    {
    class CSurface
    {
    public:
    CSurface(std::string image_path, CVector2 &position);
    ~CSurface();

    private:
    CVector2 m_position;
    };
    }

    #endif

    et voici le fichier.cpp

    #include "include.h"
    #include "CSurface.h"

    using namespace SLE;

    CSurface::CSurface(std::string image_path, CVector2 &position)
    {
    m_position = position;
    }

    J'ai donc un problème de passage par référence dans la classe CSurface et en tant que débutant en C++ je m'adresse à vous : vous pouvez voir dans le constructeur de CSurface le second paramètre est passé par référence d'ou mon problème si je ne passe pas ce paramètre par référence, mon compilateur (Visual C++ 2005) m'indique une erreur au niveau de l'édition des liens :

    CSurface.obj : error LNK2001: symbole externe non résolu "public: __thiscall SLE::CVector2::~CVector2(void)" (??1CVector2@SLE@@QAE@XZ)

    Pourquoi une référence est-elle obligatoire ici et surtout à quoi ça sert vu que je ne veux pas modifier la variable qui sera passée en paramètre?

    Voila j'attend donc vos réponses avec impatience et merci d'avance

  2. #2
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    Le problème ne vient pas du passage par référence, mais du destructeur de la CVector2. Dans cette classe tu déclares et définis en même temps toutes les fonctions sauf le destructeur que tu ne fais que déclarer. Ce qui se passe c'est que tu dois instancier un CVector2 (surement pour la passer par référence à CSurface) et que celui-ci est ensuite détruit, d'où un appel au destructeur de CVector2, que le linker ne trouve pas puisqu'il n'est que déclaré.
    Pour résoudre le problème tu peux le définir en même temps comme après ou ne pas le déclarer :

  3. #3
    Membre actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245

  4. #4
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    lol ok merci beaucoup kinji1 j'avais pas fait attention au destructeur. ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de passage par référence
    Par f56bre dans le forum Boost
    Réponses: 2
    Dernier message: 27/10/2011, 20h06
  2. Passage par copie vs passage par référence
    Par bolhrak dans le forum C++
    Réponses: 11
    Dernier message: 20/08/2006, 23h37
  3. Réponses: 4
    Dernier message: 26/12/2005, 17h01
  4. Passage par référence
    Par difficiledetrouver1pseudo dans le forum Langage
    Réponses: 9
    Dernier message: 28/09/2005, 11h17
  5. Problème très rapide de passage par référence
    Par Noxexplorer dans le forum ASP
    Réponses: 2
    Dernier message: 23/06/2005, 10h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo