Voici la ligne de commande pour la compilation ainsi que l'erreur revoyée :
g++ -fpermissive -o test test.c
In file included from test.c:1:
test.h: In constructor `ParamExclude<Type>::ParamExclude(std::string)':
test.h:22: warning: there are no arguments to `GetName' that depend on a
template parameter, so a declaration of `GetName' must be available
Comment modifie le construteur afin de corriger mon problème ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
smu writes:
Bonjour,
J'ai un petit problème de compilation avec g++ 3.4.2. Ce bout de code a été développé avec g++ 3.2.3 à l'origine.
Eh oui, 3.4 est beaucoup plus strict.
Voilà le fichier d'entête :
#include <string> #include <iostream>
using namespace std;
Cet utilisation de using namespace dans un en-tete n'est vraiment pas conseillee: on l'impose a tous ceux qui utilisent l'en-tete et ils n'en veulent peut-etre pas.
J'ai pas le temps d'expliquer pourquoi. Rechercher sur "two phase name lookup" devrait fournir des liens. Je me demande si la doc de g++ 3.4 n'a pas une explication dans les release notes ou dans la FAQ d'ailleurs.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
smu <pas@d.adresse> writes:
Bonjour,
J'ai un petit problème de compilation avec g++ 3.4.2.
Ce bout de code a été développé avec g++ 3.2.3 à l'origine.
Eh oui, 3.4 est beaucoup plus strict.
Voilà le fichier d'entête :
#include <string>
#include <iostream>
using namespace std;
Cet utilisation de using namespace dans un en-tete n'est vraiment pas
conseillee: on l'impose a tous ceux qui utilisent l'en-tete et ils
n'en veulent peut-etre pas.
J'ai pas le temps d'expliquer pourquoi. Rechercher sur "two phase
name lookup" devrait fournir des liens. Je me demande si la doc de
g++ 3.4 n'a pas une explication dans les release notes ou dans la FAQ
d'ailleurs.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
J'ai un petit problème de compilation avec g++ 3.4.2. Ce bout de code a été développé avec g++ 3.2.3 à l'origine.
Eh oui, 3.4 est beaucoup plus strict.
Voilà le fichier d'entête :
#include <string> #include <iostream>
using namespace std;
Cet utilisation de using namespace dans un en-tete n'est vraiment pas conseillee: on l'impose a tous ceux qui utilisent l'en-tete et ils n'en veulent peut-etre pas.
J'ai pas le temps d'expliquer pourquoi. Rechercher sur "two phase name lookup" devrait fournir des liens. Je me demande si la doc de g++ 3.4 n'a pas une explication dans les release notes ou dans la FAQ d'ailleurs.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Ahmed MOHAMED ALI
Bonjour,
template<class Type> class Param
Je ne vois pas où tu te sert du paramètre Type dans ton code.
cout << GetName() << endl; Un nom indépendant du paramètre du template n'est jamais recherché dans une
classe de base dépendante.Il faut donc faire un appel explicit du type this.GetName() ou faire using Param<T>::GetName ou faire l'appel Param<T>::GetName() (Pour ce appel attention quand même si GetName() est virtuelle)
Ahmed
"smu" wrote in message news:d2dlk5$l2t$
Bonjour,
J'ai un petit problème de compilation avec g++ 3.4.2. Ce bout de code a été développé avec g++ 3.2.3 à l'origine.
Voici la ligne de commande pour la compilation ainsi que l'erreur revoyée :
g++ -fpermissive -o test test.c In file included from test.c:1: test.h: In constructor `ParamExclude<Type>::ParamExclude(std::string)': test.h:22: warning: there are no arguments to `GetName' that depend on a template parameter, so a declaration of `GetName' must be available
Comment modifie le construteur afin de corriger mon problème ?
D'avance merci
smu
Bonjour,
template<class Type>
class Param
Je ne vois pas où tu te sert du paramètre Type dans ton code.
cout << GetName() << endl;
Un nom indépendant du paramètre du template n'est jamais recherché dans une
classe de base dépendante.Il faut donc faire un appel explicit du type
this.GetName() ou
faire using Param<T>::GetName ou faire l'appel
Param<T>::GetName() (Pour ce appel attention quand même si GetName() est
virtuelle)
Ahmed
"smu" <pas@d.adresse> wrote in message
news:d2dlk5$l2t$1@s1.news.oleane.net...
Bonjour,
J'ai un petit problème de compilation avec g++ 3.4.2.
Ce bout de code a été développé avec g++ 3.2.3 à l'origine.
Voici la ligne de commande pour la compilation ainsi que l'erreur revoyée
:
g++ -fpermissive -o test test.c
In file included from test.c:1:
test.h: In constructor `ParamExclude<Type>::ParamExclude(std::string)':
test.h:22: warning: there are no arguments to `GetName' that depend on a
template parameter, so a declaration of `GetName' must be available
Comment modifie le construteur afin de corriger mon problème ?
Je ne vois pas où tu te sert du paramètre Type dans ton code.
cout << GetName() << endl; Un nom indépendant du paramètre du template n'est jamais recherché dans une
classe de base dépendante.Il faut donc faire un appel explicit du type this.GetName() ou faire using Param<T>::GetName ou faire l'appel Param<T>::GetName() (Pour ce appel attention quand même si GetName() est virtuelle)
Ahmed
"smu" wrote in message news:d2dlk5$l2t$
Bonjour,
J'ai un petit problème de compilation avec g++ 3.4.2. Ce bout de code a été développé avec g++ 3.2.3 à l'origine.
Voici la ligne de commande pour la compilation ainsi que l'erreur revoyée :
g++ -fpermissive -o test test.c In file included from test.c:1: test.h: In constructor `ParamExclude<Type>::ParamExclude(std::string)': test.h:22: warning: there are no arguments to `GetName' that depend on a template parameter, so a declaration of `GetName' must be available
Comment modifie le construteur afin de corriger mon problème ?
D'avance merci
smu
smu
Bonjour,
Bonjour,
template<class Type> class Param
Je ne vois pas où tu te sert du paramètre Type dans ton code.
C'est une version allégée au strict minimum de mon code . Il me permettait de mettre en évidence mon problème.
cout << GetName() << endl;
Un nom indépendant du paramètre du template n'est jamais recherché dans une classe de base dépendante.Il faut donc faire un appel explicit du type this.GetName() ou faire using Param<T>::GetName ou faire l'appel Param<T>::GetName() (Pour ce appel attention quand même si GetName() est virtuelle)
Ahmed
Ok, avec vos deux réponses, je pense avoir saisi le détail.
smu
Bonjour,
Bonjour,
template<class Type>
class Param
Je ne vois pas où tu te sert du paramètre Type dans ton code.
C'est une version allégée au strict minimum de mon code . Il me
permettait de mettre en évidence mon problème.
cout << GetName() << endl;
Un nom indépendant du paramètre du template n'est jamais recherché dans une
classe de base dépendante.Il faut donc faire un appel explicit du type
this.GetName() ou
faire using Param<T>::GetName ou faire l'appel
Param<T>::GetName() (Pour ce appel attention quand même si GetName() est
virtuelle)
Ahmed
Ok, avec vos deux réponses, je pense avoir saisi le détail.
Je ne vois pas où tu te sert du paramètre Type dans ton code.
C'est une version allégée au strict minimum de mon code . Il me permettait de mettre en évidence mon problème.
cout << GetName() << endl;
Un nom indépendant du paramètre du template n'est jamais recherché dans une classe de base dépendante.Il faut donc faire un appel explicit du type this.GetName() ou faire using Param<T>::GetName ou faire l'appel Param<T>::GetName() (Pour ce appel attention quand même si GetName() est virtuelle)
Ahmed
Ok, avec vos deux réponses, je pense avoir saisi le détail.