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 :

[Templates] Erreur à l'édition des liens


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut [Templates] Erreur à l'édition des liens
    Bonjour à tous,

    Je suis en train d'essayer de concocter une petite classe Point en utilisant les template. J'ai pour le moment ceci :
    Point.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
     
    #if ! defined ( POINT_H )
    #define POINT_H
    template < typename T > class Point
    {
    public:
        T x;
        T y;
        Point ( );
     
        Point ( T aX, T aY);
     
        virtual ~Point ( );
     
    };
    #include "Point.cpp"
    #endif // POINT_H
    Point.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
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include "Point.h"
    template <typename T>
    Point<T>::Point ( )
    {
    #ifdef MAP
        cout << "Appel au constructeur de <Point>" << endl;
    #endif
    } 
     
    template <typename T>
    Point<T>::Point ( T aX, T aY):x(aX),y(aY)
    {
    #ifdef MAP
        cout << "Appel au constructeur de <Point(aX,aY)>" << endl;
    #endif
    }
     
    template <typename T>
    Point<T>::~Point ( )
    {
    #ifdef MAP
        cout << "Appel au destructeur de <Point>" << endl;
    #endif
    }
    CMobile.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
     
    #if ! defined ( CMOBILE_H )
    #define CMOBILE_H
     
    #include "Point.h"
     
    class CMobile
    {
    public:
        CMobile ( const CMobile & unCMobile );
        CMobile ( );
        virtual ~CMobile( );
     
    protected:
        Point<int> position;
     
    };
    #endif
    CMobile.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
    18
    19
    20
    21
    22
    23
    #include "CMobile.h"
    
    47 : CMobile::CMobile ( const CMobile & aCMobile )
    {
    #ifdef MAP
        cout << "Appel au constructeur de copie de <CMobile>" << endl;
    #endif
    54 : }
    
     57: CMobile::CMobile ( )
    {
    #ifdef MAP
        cout << "Appel au constructeur de <CMobile>" << endl;
    #endif
     64: }
    
    CMobile::~CMobile ( )
    {
    #ifdef MAP
        cout << "Appel au destructeur de <CMobile>" << endl;
    #endif
    74: }
    (Les numéros en rouge en gras correspondent aux numéros de lignes)


    Lors de la compilation j'ai le message d'erreur suivant :
    Génération du fichier <./obj/Point.o>
    ../sources/Point.cpp:54: erreur: expected constructor, destructor, or type conversion before ‘<’ token
    ../sources/Point.cpp:64: erreur: expected constructor, destructor, or type conversion before ‘<’ token
    ../sources/Point.cpp:74: erreur: expected constructor, destructor, or type conversion before ‘<’ token
    make: *** [Point.o] Erreur 1
    Quelqu'un aurait une idée de l'origine de l'erreur ?

    Par avance merci :)


    Merci par avance
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  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,
    F.A.Q. : Pourquoi mes templates ne sont-ils pas reconnus à l'édition des liens ?

    [EDIT] : pourquoi Point a un destructeur virtuel ? Point semble avoir une sémantique de valeur ce qui est souvent incompatible avec l'héritage : F.A.Q Quand est-ce qu'une classe a une sémantique de valeur ?

  3. #3
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,

    C'est ce que je venais de voir sur la FAQ, d'ailleurs j'avais fait un post que j'ai supprimé suite au test de cette solution. Je me retrouve donc face à d'autres erreurs ...

    Je vais essayer de résoudre tout ça et je reviendrais si nécessaire.

    Merci de ton intervention
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  4. #4
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Re,

    Je viens de mettre à jour le message d'erreur.

    Pour la méthode virtuelle c'était juste un oubli de ma part.


    Par contre je n'ai pas bien saisi la notion de "sémantique de valeur" ?
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  5. #5
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Re,

    C'est OK pour moi, l'erreur est résolue ... J'avais oublié d'enlever ma classe template de mon makefile (elle n'était initialement pas sous forme de template).


    Merci
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  6. #6
    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
    Citation Envoyé par Bleys Voir le message
    Par contre je n'ai pas bien saisi la notion de "sémantique de valeur" ?
    2 point qui ont les mêmes coordonnées vont être considérés comme égaux et substituable l'un à l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Point<int> pt_1(1,1);
    Point<int> pt_2(1,1);
     
    CMobile mon_mobile;
    mon_mobile.aller_a(pt_1); // ça et 
    mon_mobile.aller_a(pt_2); // ça, c'est la même chose.
    Le point ont une sémantique de valeur.
    Ce qui différencie 2 points c'est leur état, pas l'objet qui porte ces valeurs.

    Les mobiles ont une sémantique d'entité.
    2 mobiles qui ont les mêmes coordonnées ne sont pas identiques et substituables l'un à l'autre. Il s'agit juste de mobiles au même endroit.
    Ce qui différencie 2 mobiles c'est l'instance de l'objet qui les représente, pas leur état interne qui peuvent être identique.

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

Discussions similaires

  1. Erreur d'édition des liens dans un projet c++
    Par modafine dans le forum C++
    Réponses: 3
    Dernier message: 08/04/2009, 15h53
  2. Erreur à l'édition des liens
    Par biloute555 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 17/05/2008, 11h46
  3. Réponses: 0
    Dernier message: 20/07/2007, 13h40
  4. Erreur à l'édition des liens en mode release
    Par Deydey dans le forum Visual C++
    Réponses: 3
    Dernier message: 16/04/2007, 14h56
  5. [VC++] Erreur d'édition des liens LNK1143
    Par Yellowmat dans le forum MFC
    Réponses: 6
    Dernier message: 01/02/2006, 15h00

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