82 votes

Il n'y a pas d'arguments qui dépendent d'un paramètre de modèle

J'essaye de faire ce qui suit :

 template <class T>
std::ifstream& operator>> (std::ifstream& fin, List<T> l)
{
    T temp;
    l.resize(0);
    fin >> ignore(1,'\t');
    for(ListIterator<T> i=l.begin();i!=l.end();i++)
    {
        fin >> ignore(1,'\t') >> temp;
        l.push_back(temp);
    }
    return fin;
}

Je dois lire tout le contenu d'un fichier. Chaque champ est séparé par le caractère '\t' , je dois donc ignorer les caractères '\t' .

Le journal des erreurs est le suivant :

 /home/ramy/Documents/C++/Prova/Util.h||In function ‘std::ifstream& Util::operator>> (std::ifstream&, Util::List<T>)':|
/home/ramy/Documents/C++/Prova/Util.h|431|error: there are no arguments to ‘ignore' that  depend on a template parameter, so a declaration of ‘ignore' must be available|
/home/ramy/Documents/C++/Prova/Util.h|431|note: (if you use ‘-fpermissive', G++ will  accept your code, but allowing the use of an undeclared name is deprecated)|
||=== Build finished: 1 errors, 0 warnings ===|

66voto

John Hainsworth Points 517

Pour une réponse plus facile, voir https://web.archive.org/web/20130423054841/http://www.agapow.net/programming/cpp/no-arguments-that-depend-on-a-template-parameter

TL;DR : remplacez ignore() par this->ignore() et votre problème disparaîtra.

6voto

J'ai eu le même problème et je l'ai résolu en modifiant l'ordre d'inclusion.

Comme le dit phresnel, le compilateur ne peut pas résoudre cela lors de la 1ère phase, ce qui dans mon cas était dû au fait que l'en-tête avec la méthode de modèle problématique était inclus avant celui avec la méthode interne qui n'a pas pu être résolu.

L'ajout de l'en-tête nécessaire a supprimé l'erreur pour moi. J'espère que ceci aide quelqu'un d'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X