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 de LINKER lors de l'utilisation d'un namespace dans une projet C++


Sujet :

C++

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut problème de LINKER lors de l'utilisation d'un namespace dans une projet C++
    Bonjour à tous

    je suis actuellement confrontée à un petit problème relatif à l'utilisation des namespaces en C++.

    Plus particulièrement, je me retrouve face à un problème de "LINKER" à la création, dans un namespace X, d'un objet défini dans un namespace Y...

    Comme j'ai un peu de mal à formuler clairement ma question, je préfère le faire par la biais d'un exemple très simple :

    J'ai crée un projet C++ (sous visual C++ 2008) nommé NS1 dans lequel j'ai défini un namespace appelée NS1 et dans lequel j'ai implémenté la classe que j'ai nommé NS1Class :
    - voici le fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #ifndef __NS1CLASS_H__
    #define __NS1CLASS_H__
     
    #include <stdio.h> 
    #include <windows.h>
    #include <iostream>
     
    using namespace std;
     
    namespace NS1
    {
    	class NS1Class
    	{
    	public:
    		NS1Class();
    		~NS1Class();
    		void method();		
    	};
    }//end namespace NS1
    #endif
    - et voici le fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include "NS1Class.h"
    namespace NS1
    {
    NS1Class::NS1Class()
    {
    }
    NS1Class::~NS1Class()
    {
    }
    void NS1Class::method()
    {
    	cout<<"method NS1class\n";
    }
    }
    Ensuite j'ai crée un projet C++ (également sous visual C++ 2008) nommé NS2 dans lequel j'ai défini un namespace appelée NS2 et dans lequel j'ai implémenté la classe que j'ai nommé NS2Class. Cette classe a pour attribut un pointeur sur un objet de type NS1:
    - voici le fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #ifndef __NS2CLASS_H__
    #define __NS2CLASS_H__
     
    #include <stdio.h> 
    #include <windows.h>
    #include <iostream>
    #include "NS1Class.h"
     
    using namespace std;
    using namespace NS1;
     
    namespace NS2
    {
    	class NS2Class
    	{
    	private:
    		NS1Class * ns1;
    	public:
    		NS2Class();
    		~NS2Class();
    		void method();		
    	};
    }//end namespace NS2
    #endif
    - et voici le fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #include "NS2Class1.h"
     
    namespace NS2
    {
    NS2Class::NS2Class()
    {
     ns1 = new NS1Class();
    }
    NS2Class::~NS2Class()
    {
    }
    void NS2Class::method()
    {
    	cout<<"method NS2 class\n";
    }
    }
    Note: Dans les propriétés de mon projet NS2, j'ai bien mis dans C/C++>>Général >> Autres fichier include le dossier relatif au projet NS1!!

    Je n'ai pas de problème de compilation. En revanche, quand je "génère" la solution, je suis confrontée à l'erreur suivante :

    >NS2Class.obj : error LNK2019: symbole externe non résolu "public: __thiscall NS1::NS1Class::NS1Class(void)" (??0NS1Class@NS1@@QAE@XZ) référencé dans la fonction "public: __thiscall NS2::NS2Class::NS2Class(void)" (??0NS2Class1@NS2@@QAE@XZ)
    1>D:\Documents\Visual Studio 2008\Projects\TestNamespaces\Debug\TestNamespaces.exe : fatal error LNK1120: 1 externes non résolus
    - en supprimant la ligne "ns1 = new NS1Class();", je n'ai plus ce problème... ce qui m'a amené à conclure que cette erreur était liée à l'instanciation de mon objet

    je ne sais pas du tout comment faire pour résoudre ce problème. J'ai cherché sur développez.com et autre forum... Ce problème a déjà été mentionné dans des discussions ultérieures mais je n'ai pas trouvé les références qui proposaient une solution...

    donc si jamais vous avez une idée pour résoudre ce problème...

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Est-ce que Projet1 est une librairie et si oui as-tu dis à Projet2 de l'utiliser?
    Si Projet1 n'est pas une librairie, alors il faut que tu rajoutes les .cpp de Projet1 dans Projet2.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    le projet 1 appelé NS1 n'est pas une librairie...

    J'ai procédé comme tu l'as conseillé et ça marche trés bien! merçi beaucoup!

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

Discussions similaires

  1. [SP-2010] problème lors de l'utilisation d'un delay dans un workflow
    Par eldrad95 dans le forum Développement Sharepoint
    Réponses: 0
    Dernier message: 02/11/2011, 15h35
  2. Réponses: 2
    Dernier message: 27/03/2009, 11h30
  3. Réponses: 1
    Dernier message: 17/04/2007, 22h07
  4. Réponses: 6
    Dernier message: 06/11/2006, 17h57
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

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