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 :

[POO] problèmes de compilation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [POO] problèmes de compilation
    Ca y est! J'ai terminé ma partie conception !
    Merci Miles, Luc, Eusebe, Swoög ... pour vos remarques et encouragements

    Arrive la partie erreur de compilation!!!
    C'est pas la plus facile...

    J'ai pour l'instant environ 300 erreurs, et je n'en comprend aucunes, elles n'ont pas lieu d'être pour la plupart. M'étonnerai pas qu'il y ait là dedans une petite erreur qui fasse naître tout le reste, comme d'hab.

    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
    55
    #ifndef WARPING_H
    #define WARPING_H
     
    #include "CImg.h"
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
     
    #include "PDC.h"
     
     
    class Warping
    {
    public:
    	Warping(int n_choc, std::string nom_cfp, cimg_library::CImg <unsigned short>, cimg_library::CImg <unsigned short>);
    	Warping(std::string nom_fichier, cimg_library::CImg <unsigned short>, cimg_library::CImg <unsigned short>);
    	~Warping();
     
        <div style="margin-left:40px">void lancerWarping();</div><div style="margin-left:40px">cimg_library::CImg<float> Moyenne(const cimg_library::CImg<unsigned short>& src, int valeur);</div>	cimg_library::CImg<unsigned short> const getImageWarped();
    	void setNombrePointsInterpol(int);
     
    	void ajusterVisibleEtIR();
     
    	void ajouterPDCDepart(int a, int b);
    	void ajouterPDCArrivee(int a, int b);
    	void supprimerPDCDepart(int x, int y);
    	void supprimerPDCArrivee(int x, int y);
     
    	void affichageDepart();
    	void affichageArrivee();
     
     
    private:
    	PDC pdc;
     
    	float coeff_mul;
     
    	cimg_library::CImg <unsigned short> image_visible;
    	cimg_library::CImg <unsigned short> image_IR;
    	cimg_library::CImg <unsigned short> champ_deformation;
    	cimg_library::CImg <unsigned short> image_IR_warped; 
     
    	int nbpoints_interpol; // nombre de points pour l'interpolation
    	std::vector< std::pair <int, int> > pointschoisis; //points gardés pour l'interpolation
     
    	void nProchePoints(const std::pair <int, int>& H, int n);
    	std::pair<float, float> pointsInterpolation(std::pair <int, int>& H);
    	bool Test(const std::pair <int, int>& point);
    	cimg_library::CImg<> interpolationLin();
     
    	CImgDisplay depart_disp;
    	CImgDisplay arrivee_disp;
    }
    #endif
    Je pense qu'on va en rester là pour l'instant: voici ce que m'indique le compilo:
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\warping.h(16) : error C2447: '{': en-tête de fonction manquant (liste formelle à l'ancien format?)
    warping.cpp(4) : error C2653: 'Warping': n'est pas un nom de classe ni d'espace de noms
    warping.cpp(6) : error C2550: 'Warping': les listes d'initialiseurs de constructeur ne sont autorisées que dans la définition d'un constructeur
    warping.cpp(7) : error C3861: 'ajusterVisibleEtIR': identificateur introuvable, même avec une recherche qui dépend de l'argument
    warping.cpp(10) : error C3861: 'champ_deformation': identificateur introuvable, même avec une recherche qui dépend de l'argument
    warping.cpp(12) : error C3861: 'depart_disp': identificateur introuvable, même avec une recherche qui dépend de l'argument
    warping.cpp(13) : error C3861: 'arrivee_disp': identificateur introuvable, même avec une recherche qui dépend de l'argument
    warping.cpp(15) : error C2228: la partie gauche de '.title' doit avoir un type class/struct/union
    le type est ''unknown-type''
    warping.cpp(15) : error C3861: 'depart_disp': identificateur introuvable, même avec une recherche qui dépend de l'argument
    warping.cpp(16) : error C2228: la partie gauche de '.title' doit avoir un type class/struct/union
    Merci de votre aide!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Si ton copier coller est exact, il manque un ; à la fin de la déclaration de ta classe, ce qui donne des erreurs étranges à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Warping
    {
        // ...
    };
    C'est dû au fait que le compilateur pense que tu vas déclarer une variable juste après, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Warping
    {
        // ...
    } toto;
    Et lorsque tu inclus ton .h, ça ne ressemble pas du tout à ça et ça plante.

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Il manque déjà le ";" à la fin de la déclaration de ta classe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Warping
    {
    ...
    };
    Edit : Encore grilled...

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut

    OOOOUPS...
    Merci les gars! J'avais pas vu!

    Voici un autre problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Choc::ajouterAntenne(std::string nom_antenne)
    {
    	Antenne *antenne = new Antenne(*this, nom_antenne);
    	tableau_cfp.push_back(antenne);
    }
    Le compilo crie, car il ne connait pas Antenne.

    je m'explique:voici choc.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
    26
    27
    28
    29
    30
    31
    32
    #ifndef CHOC_H
    #define CHOC_H
    
    #include "CImg.h"
    #include <iostream>
    #include <string>
    #include <vector>
    
    
    class CFP;
    
    class Choc {
    
    public:
    	Choc (int num_choc);
    	~Choc();
    
    	void ajouterComposant(CFP*);
    	void ajouterLPT(std::string);
    	void ajouterAntenne(std::string);
    	void supprimerComposant(std::string);
    	std::vector <CFP*> getTableauCFP();
    	int getNumeroChoc() const ;
    
    	void setNumeroChoc (int);
    
    private:
    	std::vector <CFP*> tableau_cfp;
    	int numero_choc;
    };
    
    #endif
    cfp.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
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #ifndef CFP_H
    #define CFP_H
    
    
    #define LARGEUR_ECRAN cimg_library::CImgDisplay::screen_dimx()
    #define HAUTEUR_ECRAN cimg_library::CImgDisplay::screen_dimy()
    
    
    #include "CImg.h"
    #include <iostream>
    #include <fstream>
    #include <string>
    
    #include "choc.h" // dépendance circulaire
    #include "camera.h"
    
    class CFP {
    
    public:
    	CFP(Choc & c, std::string nom_cfp);
    	virtual ~CFP();
    
    	cimg_library::CImg <unsigned short> getImageVisible() const;
    
    	cimg_library::CImg <unsigned short> getImageIR_full() const;
    	cimg_library::CImg <unsigned short> getImageIR_ref() const;
    	cimg_library::CImg <unsigned short> getImageIR_warped() const;
    
    	std::string getNomComposant() const;
    
        virtual void setImageReferenceIR() = 0;
    	virtual void setImageReferenceIR(cimg_library::CImg <unsigned short> ) = 0;
    
    	void setImageVisible();
    	void setImageVisible(cimg_library::CImg <unsigned short>);
    
    	void afficherMix() const;
    
    	void importImageIR(int);
    
    	void lancerWarping();
    
    
    
    protected:	
    	Camera camera;
    	cimg_library::CImg <unsigned short> image_IR_ref;
    	cimg_library::CImg <unsigned short> image_IR_full;// plein écran
    	cimg_library::CImg <unsigned short> image_IR_warped;
    	cimg_library::CImg <unsigned short> image_visible;
    	cimg_library::CImg <unsigned short> image_visible_full;// plein écran
    	std::string nom_composant;
    	int zone;
    
    	Choc      & getChoc()       {return m_choc; }
        Choc const& getChoc() const {return m_choc; }
        int getChocNum() const;
        Choc & m_choc; // référence => on ne change pas de contexte!
    
    	cimg_library::CImg <unsigned char> ChargeLUT(std::string);
    
    	float coeff_mul;
    	void ajusterVisibleEtIRFull();
    };
    
    #endif
    CFP possède 2 classes filles: Antenne, LPT.

    C'est ok pour l'inclusion réciproque entre CFP et Choc (cf FAQ).

    Comment dois-je effectuer mes déclarations?
    - Que dois-je mettre dans la classe Choc concernant CFP et ses deux classes filles?
    - Dans les deux classes filles, quels sont les en-têtes à placer?


    Merci !

  5. #5
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Dans Choc.cpp, il faut inclure Antenne.h pour pouvoir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Antenne *antenne = new Antenne(*this, nom_antenne);
    Dans tes classes filles, sauf erreur, il faut inclure le .h de leur classe parente (donc cfp.h)

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Merci Eusebe, c'est bien ce que j'avais fait. J'ai toujours autant d'erreurs qui se répètent. Je comprend rien....


    Voici une (petite) partie de ce que m'indique le compilo:
    Compilation...
    warping.cpp
    PDC.cpp
    main.cpp
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2143: erreur de syntaxe*: absence de ')' avant '&'
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2143: erreur de syntaxe*: absence de ';' avant '&'
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2460: 'Camera::Choc'*: utilise 'Camera', en cours de définition
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(16)*: voir la déclaration de 'Camera'
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2501: 'Camera::c'*: Spécificateurs de type ou de classe de stockage manquants
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'nom_cfp'
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2501: 'Camera::string'*: Spécificateurs de type ou de classe de stockage manquants
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2059: erreur de syntaxe*: ')'
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(19) : error C2501: 'Camera::nom_cfp'*: Spécificateurs de type ou de classe de stockage manquants
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(31) : error C2143: erreur de syntaxe*: absence de ';' avant '&'
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(31) : error C2501: 'Camera::Choc'*: Spécificateurs de type ou de classe de stockage manquants
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(31) : error C2501: 'Camera::getChoc'*: Spécificateurs de type ou de classe de stockage manquants
    c:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\camera.h(31) : warning C4183: 'getChoc'*: type de retour manquant*; fonction membre retournant 'int' assumée
    Je ne sais même pas quoi vous montrer comme code. Il y en a déjà pas mal avant. A tout hasard, voici camera.h, là ou se situe la première erreur (ligne en gras)...
    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
    #ifndef CAMERA_H
    #define CAMERA_H
    
    
    #include "CImg.h"
    #include "choc.h"
    #include "cfp.h"
    
    
    #include <iostream>
    #include <string>
    
    
    
    
    class Camera  {
    
    public:
    	Camera(Choc &c, std::string nom_cfp);
    	~Camera();
    
    	void convertionDLTemperature(cimg_library::CImg <unsigned short>& image);
    	int getNumeroCamera () const;
    	void setNumeroCamera(int numero_cam);
    	void setCorrespondanceCameraNumero(std::string nom_cfp);
    	cimg_library::CImg <unsigned short> importImageIR(int);
    
    private:
    	int numero_camera;
    
    	Choc & getChoc() {return m_choc; }
        Choc const& getChoc() const {return m_choc; }
        int getChocNum() const;
        Choc & m_choc;
    };
    
    #endif
    Merci encore pour votre soutien...

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    J'ai l'impression que tu as encore des problèmes d'inclusion cyclique...

    camera.h inclus choc.h qui inclus lui-même camera.h.

    Or, a priori, tu n'en a pas besoin puisque tu n'utilises que des références vers Choc.

    Essaie en mettant dans camera.h "class Choc;" au lieu de #include "choc.h", et met ton include dans camera.cpp.

    (tu devrais même pouvoir faire ça avec les autres inclusions de classes...)

    (re)voir la FAQ : http://c.developpez.com/faq/cpp/?pag...erence_croisee

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Eusebe
    J'ai l'impression que tu as encore des problèmes d'inclusion cyclique...
    J'ai l'impression que tu as raison, je vais jeter un coup d'oeil...
    Tu crois que ça pourrait donner ce genre d'erreur????

  9. #9
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    J'ai toujours pas trouvé...
    Dans quel cas un class CFP; peut-il replacé un #include "cfp.h" ???

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par poukill
    J'ai toujours pas trouvé...
    Dans quel cas un class CFP; peut-il replacé un #include "cfp.h" ???

    Dans tous les modules où des instances de CFP sont référencées (sous forme de pointeur ou de référence) mais sans être créées, accédées ni détruites.

    La règle est : commence toujours par voir si un ne pourrait pas suffire dans un .h, et si ça coince tu mets en dernier ressort.

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je viens de tenter un truc: enlever les extensions managées...
    Et là j'ai toujours deux erreurs, mais mieux "expliquées"...
    Ca donne ça:
    Édition des liens en cours...
    antenne.obj : error LNK2019: symbole externe non résolu "public: virtual __thiscall Antenne::~Antenne(void)" (??1Antenne@@UAE@XZ) référencé dans la fonction "public: virtual void * __thiscall Antenne::`scalar deleting destructor'(unsigned int)" (??_GAntenne@@UAEPAXI@Z)
    lpt.obj : error LNK2019: symbole externe non résolu "public: virtual __thiscall LPT::~LPT(void)" (??1LPT@@UAE@XZ) référencé dans la fonction "public: virtual void * __thiscall LPT::`scalar deleting destructor'(unsigned int)" (??_GLPT@@UAEPAXI@Z)
    C:\Documents and Settings\GD280706\Bureau\Analyse v1.1\Analyse\Debug\Analyse.exe : fatal error LNK1120: 2 externes non résolus
    encore au niveau du virtuel !

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

Discussions similaires

  1. problème de compilation sous visual C++
    Par fabmili dans le forum MFC
    Réponses: 4
    Dernier message: 08/02/2004, 19h52
  2. problème de compil devc++ socket
    Par stefdem dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 11/12/2003, 11h33
  3. Réponses: 1
    Dernier message: 29/10/2003, 12h16
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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