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

MFC Discussion :

[VC++] Problème include de header


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut [VC++] Problème include de header
    Salut tout le monde !

    J'ai un Workspace qui contient deux projets : PORJET_A et PROJET_B.

    PROJET_B utilise un header de PROJET_A.

    Le problème intervient à l'inclusion du header de PROJET_A dans un des fichiers de PROJET_B.

    Voici ce que je fais :
    * j'active PROJET_B
    * dans Project/Settings/CC++/preprocessor j'ajoute un chemin de recherche de la façon suivante : ./../PROJET_A
    * dans un des fichiers de PROJET_B j'écris
    toto.h est :
    * le nom d'un des fichiers de PROJET_A que je souhaite inclure dans un des fichiers de PROJET_B
    * contenu dans le répertoire PROJET_A

    PROJET_A et PROJET_B sont tous les deux au même niveau dans le workspace.

    Bref ... j'obtiens une erreur à l'édition des liens.

    Je comprends pas pourquoi il y a un problème, qu'est ce que j'ai oublié ? Qu'est ce que je dois faire pour que l'inclusion se fasse ?

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    edition des liens ça veut qu'il manque la fonction dans le projet.
    la definition c''est une chose (.h) mais il manque l'implementation (.cpp).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    PROJET_A contient toto.h et toto.cpp

    Il y a autre chose que je doive ajouter dans project settings ?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    sans voir l'erreur c'est dure de repondre ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Ok, un peu plus de détail sur le problème.

    toto.h contient une classe CTrou.

    PROJET_B utilise un objet CTrou ... et plus précisément 3 fonctions de cet objet.

    Pour chaque appel de ces fonctions j'ai un message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ModeleCarteParcours.obj : error LNK2001: unresolved external symbol "public: int const  __thiscall CTrou::ObtenirCoupsRecus(void)" (?ObtenirCoupsRecus@CTrou@@QAE?BHXZ)
     
    ModeleCarteParcours.obj : error LNK2001: unresolved external symbol "public: int const  __thiscall CTrou::ObtenirPar(void)" (?ObtenirPar@CTrou@@QAE?BHXZ)
     
    ModeleCarteParcours.obj : error LNK2001: unresolved external symbol "public: int const  __thiscall CTrou::ObtenirDistance(void)" (?ObtenirDistance@CTrou@@QAE?BHXZ)
    Que puis je dire d'autre ... PROJET_B contient une classe (CClasseB) dont un des membres est de type CTrou*.

    Dans le .h de la classe CClasseB j'ai écrit une déclaration anticipé pour la classe CTrou et dans le .cpp de la classe CClasseB j'ai (enfin j'essaye) inclus le .h de la classe CTrou.

    Est ce qu'il faut encore plus d'informations ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Dernières informations que je peux donner :

    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
     
    void CModeleCarteParcours::Afficher()
    {
    	cout << "Je suis un modèle de carte de parcours et mon nom est " << this->m_szNomDuModele << endl;
     
    	cout << "Mes coordonnées sont les suivantes :" << endl;
    	cout << "\t" << this->m_szNomDuGolf << endl;
    	cout << "\t" << this->m_szAdresseNumero << " " << this->m_szAdresseRue << endl;
    	cout << "\t" << this->m_szAdresseTelephone << endl;
    	cout << "\t" << this->m_szAdresseCodePostal << " " << this->m_szAdresseVille << endl;
     
    	cout << "Distance    = " << this->m_pTrou->ObtenirDistance() << endl;
    	cout << "Par         = " << this->m_pTrou->ObtenirPar() << endl;
    	cout << "Coups reçus = " << this->m_pTrou->ObtenirCoupsRecus() << endl;
    }
    Les fonctions ObtenirDistance, ObtenirPar et ObtenirCoupsRecus renvoient toutes un int.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    je dirais que :
    l'implementation de ta classe CTrou ne fait pas partie de ton projet .
    ou ton .h n'est pas accord avec l'implementation .(pb de version de source/.h).
    par exemple le .h est correcte ,mais dans le source il manque ces 3 fonctions, d'ou l'erreur à l'edition des liens.


  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Le projet PROJET_A contient bien les fichiers (.h et .cpp) de la classe CTrou. Les fonctions de CTrou sont bien implémentées dans le .cpp L'édition des liens, la compilation et l'exécution de PROJET_A s'effectue problème.

    Concernant PROJET_B dois je ajouter aussi les sources de la classe CTrou ? Pour rappel ce que j'ai fait c'est modifier le project settings de PROJET_B (comme indiqué au début de mon message) et voici le .h et le .cpp de la classe CModeleCarteParcours ... ça ne suffit pas pour inclure la classe CTrou et la rendre utilisable dans les classes de PROJET_B ?

    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
    26
    27
    28
    29
    30
    31
    32
    33
     
    // ModeleCarteParcours.h: interface for the CModeleCarteParcours class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_MODELECARTEPARCOURS_H__19F908DB_832F_43B7_A827_8B4FD24DBABE__INCLUDED_)
    #define AFX_MODELECARTEPARCOURS_H__19F908DB_832F_43B7_A827_8B4FD24DBABE__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    class CTrou;
     
    class CModeleCarteParcours  
    {
    public:
    	void Afficher();
    	CModeleCarteParcours();
    	virtual ~CModeleCarteParcours();
     
    private:
    	CString m_szNomDuModele;
    	CString m_szNomDuGolf;
    	CString m_szAdresseRue;
    	CString m_szAdresseNumero;
    	CString m_szAdresseTelephone;
    	CString m_szAdresseCodePostal;
    	CString m_szAdresseVille;
    	CTrou*	m_pTrou;
    };
     
    #endif // !defined(AFX_MODELECARTEPARCOURS_H__19F908DB_832F_43B7_A827_8B4FD24DBABE__INCLUDED_)
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    // ModeleCarteParcours.cpp: implementation of the CModeleCarteParcours class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #include "stdafx.h"
    #include "TEST_MODEL_OF_PLAY_CARD.h"
    #include "ModeleCarteParcours.h"
    #include "Trou.h"
     
    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif
     
    using namespace std;
     
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
     
    CModeleCarteParcours::CModeleCarteParcours():
    m_szNomDuModele(_T("<PAS DE NOM DE MODELE>")),
    m_szNomDuGolf(_T("<PAS DE NOM DE GOLF>")),
    m_szAdresseRue(_T("<PAS DE RUE>")),
    m_szAdresseNumero(_T("<PAS DE NUMERO DE RUE>")),
    m_szAdresseTelephone(_T("<PAS DE NUMERO DE TELEPHONE>")),
    m_szAdresseCodePostal(_T("<PAS DE CODE POSTAL>")),
    m_szAdresseVille(_T("<PAS DE VILLE>")),
    m_pTrou(NULL)
    {
    	cout << "Appel du constructeur de la classe CModeleCarteDeParcours" << endl;
    }
     
    CModeleCarteParcours::~CModeleCarteParcours()
    {
    	cout << "Appel du destructeur de la classe CModeleCarteDeParcours" << endl;
    }
     
    void CModeleCarteParcours::Afficher()
    {
    	cout << "Je suis un modèle de carte de parcours et mon nom est " << this->m_szNomDuModele << endl;
     
    	cout << "Mes coordonnées sont les suivantes :" << endl;
    	cout << "\t" << this->m_szNomDuGolf << endl;
    	cout << "\t" << this->m_szAdresseNumero << " " << this->m_szAdresseRue << endl;
    	cout << "\t" << this->m_szAdresseTelephone << endl;
    	cout << "\t" << this->m_szAdresseCodePostal << " " << this->m_szAdresseVille << endl;
     
    	cout << "Distance    = " << this->m_pTrou->ObtenirDistance() << endl;
    	cout << "Par         = " << this->m_pTrou->ObtenirPar() << endl;
    	cout << "Coups reçus = " << this->m_pTrou->ObtenirCoupsRecus() << endl;
    }

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Sinon quelle est la démarche (que modifier dans les project settings, dans les sources des fichiers utilisateurs) pour inclure et utiliser une classe dont les sources sont définies dans un autre projet ?

    Franchement je sèche

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Bon finalement j'ai fait, en plus du reste, Projet/Add to project/File en sélectionnant les fichiers de la classe CTrou et je n'ai plus d'erreur.

    Je ne pensais pas qu'il était nécessaire de faire ça sachant que j'avais ajouté dans les project settings les liens sur le répertoire qui contient les sources ... me suis trompé mais le principal c'est que ça marche.

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par Yellowmat
    Le projet PROJET_A contient bien les fichiers (.h et .cpp) de la classe CTrou. Les fonctions de CTrou sont bien implémentées dans le .cpp L'édition des liens, la compilation et l'exécution de PROJET_A s'effectue problème.

    Concernant PROJET_B dois je ajouter aussi les sources de la classe CTrou ? P
    oui ,sinon ça ne fonctionnera pas ....
    il suffit de rajouter le source au projet en precisant le chemin ....

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/03/2009, 17h36
  2. include et header
    Par Hyperion99 dans le forum Langage
    Réponses: 1
    Dernier message: 21/05/2006, 20h05
  3. problèmes avec un header
    Par tioseb dans le forum Langage
    Réponses: 1
    Dernier message: 04/04/2006, 16h01
  4. Problème avec un HEADER
    Par Zebulonn dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2005, 13h56
  5. problème include avec win 2003 / IIS6
    Par fredoche dans le forum ASP
    Réponses: 3
    Dernier message: 26/09/2005, 17h36

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