Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
879 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  10 lignes C++ avec templates qui ne compilent pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

10 lignes C++ avec templates qui ne compilent pas

n°1687825
FrigoAcide
Posté le 18-02-2008 à 14:29:40  profilanswer
 

Salut à tous,  
 
J'ai un problème avec les lignes de code C++ suivantes qui ne compilent pas :  
 

Code :
  1. template <typename T>
  2. class Parent
  3. {
  4. protected:
  5. int _property;
  6. };
  7. template <typename T>
  8. class Child : public Parent <T>
  9. {
  10. void test () {_property;}
  11. };


 
Je lance la compilation avec la commande g++ -c monFichier.cpp sous Cygwin.
 
Version de g++ : 3.4.4
 
A noter que ça ne compile pas non plus avec la v3.4.2 de g++ sous Sun Solaris; en revanche ça compile sous Windows avec Visual Studio v6.0.
 
J'ai l'erreur suivante :  
 

Code :
  1. monFichier.cpp: In member function `void Child<T>::test()':
  2. monFichier.cpp:13: error: `_property' undeclared (first use this function)
  3. monFichier.cpp:13: error: (Each undeclared identifier is reported only once for each function it appears in.)


 
Avez-vous une idée d'où provient l'erreur ? A noter que si je vire les attributs templates, le code compile.
 

Code :
  1. //template <typename T>
  2. class Parent
  3. {
  4. protected:
  5. int _property;
  6. };
  7. //template <typename T>
  8. class Child : public Parent //<T>
  9. {
  10. void test () {_property;}
  11. };


 
Merci.


---------------
Paléoanthropologie, évolution de l'espèce humaine et préhistoire
mood
Publicité
Posté le 18-02-2008 à 14:29:40  profilanswer
 

n°1687829
skeye
Posté le 18-02-2008 à 14:32:29  profilanswer
 

c'est pas juste  
 
template <typename T>  
class Child : public Parent
{
...
}
 
 
:??:


---------------
Can't buy what I want because it's free -
n°1687831
FrigoAcide
Posté le 18-02-2008 à 14:35:32  profilanswer
 

Non, voici le résultat :/
 

Code :
  1. template <typename T>
  2. class Parent
  3. {
  4. protected:
  5. int _property;
  6. };
  7. template <typename T>
  8. class Child : public Parent //<T>
  9. {
  10. void test () {_property;}
  11. };


 

Code :
  1. monFichier.cpp:12: error: expected class-name before '{' token
  2. monFichier.cpp: In member function `void Child<T>::test()':
  3. monFichier.cpp:13: error: `_property' undeclared (first use this function)
  4. monFichier.cpp:13: error: (Each undeclared identifier is reported only once for each function it appears in.)


---------------
Paléoanthropologie, évolution de l'espèce humaine et préhistoire
n°1687836
skeye
Posté le 18-02-2008 à 14:37:30  profilanswer
 

...et this->_property, ça marche?


---------------
Can't buy what I want because it's free -
n°1687845
FrigoAcide
Posté le 18-02-2008 à 14:41:14  profilanswer
 

Ouais ça marche [:dawa]
 
Merci pour ton aide.
 
Ptain mais c'est quoi, c'est un bug de gcc ?


---------------
Paléoanthropologie, évolution de l'espèce humaine et préhistoire
n°1687847
skeye
Posté le 18-02-2008 à 14:42:25  profilanswer
 

ya p-e une raison quelque part, mais je l'ignore - je te laisse chercher.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1687852
FrigoAcide
Posté le 18-02-2008 à 14:46:04  profilanswer
 
n°1688068
Taz
bisounours-codeur
Posté le 18-02-2008 à 19:44:54  profilanswer
 

Non c'est normal. Ici la _property n'appartient à un contexte dépendant. Donc le compilateur regarde dans Child, puis dans ::. Pour que ça soit valide, tu doit spécifier le contexte avec this pour remettre à plus tard (à l'instantiation du template) la recherche de _property.

n°1688073
Ace17
Posté le 18-02-2008 à 20:04:50  profilanswer
 

Pourquoi le compilateur ne regarde-t-il pas dans Parent? J'imagine qu'il y a une bonne raison mais ca me parait pas evident...

n°1688076
Joel F
Real men use unique_ptr
Posté le 18-02-2008 à 20:08:05  profilanswer
 

bah il a aucune raison de privilégier l'un ou l'autre

mood
Publicité
Posté le 18-02-2008 à 20:08:05  profilanswer
 

n°1689579
Taz
bisounours-codeur
Posté le 20-02-2008 à 18:37:41  profilanswer
 

Ace17 a écrit :

Pourquoi le compilateur ne regarde-t-il pas dans Parent? J'imagine qu'il y a une bonne raison mais ca me parait pas evident...


Parce que tant que ton template n'est pas instancié, il n'y nulle part où regarder (on peut imaginer différentes spécialisations de Parent, certains n'ayant pas de membre _property). En explicitant this->, tu forces la résolution l'instanciation.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  10 lignes C++ avec templates qui ne compilent pas

 

Sujets relatifs
[PHP-Eclipse] code templates ?[SGBD Access 2007 pro] comment générer des lignes automatique
Récuperer et afficher plusieurs lignes de donnéesHelp : script awk avec match regexp sur deux lignes
Séparer et transformer les lignes d'un textarea[C++] [resolu] Problème de templates
[SqlServer] Splitter un champ et rendre en 2 lignesproblème usort() avec un tableau de 1000 - 2000 lignes
Lignes de commande depuis script PHPvba - Excel - Tri de lignes via une tmplist()
Plus de sujets relatifs à : 10 lignes C++ avec templates qui ne compilent pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR