L'appel de fonction de modèle dans le modèle de classe
Avertissement: La question suivante est probablement tellement facile que je pourrais être choqué de voir la première réponse. En outre, je tiens à m'excuser pour tous les doublons de questions - syntaxique problèmes ne sont pas toujours faciles à identifier-être l'explication verbale et donc à la recherche pour eux n'est pas aussi facile...
Mais assez de cela. J'ai deux basées sur des modèles de classes, l'un de ceux qui a basé sur un modèle de fonction de membre de l'autre classe tente d'appeler cette fonction. Une minime erreur produisant exemple est montré ci-dessous:
#include <iostream>
template <typename T>
class Foo {
public:
Foo() {
}
template <typename outtype>
inline outtype bar(int i, int j, int k = 1) {
return k;
}
};
template <typename T>
class Wrapper {
public:
Wrapper() {
}
double returnValue() {
Foo<T> obj;
return obj.bar<double>(1,2); //This line is faulty.
}
};
int main() {
Wrapper<char> wr;
double test = wr.returnValue();
std::cout << test << std::endl;
return 0;
}
Au moment de la compilation, il en résulte
expected primary-expression before 'double'
expected ';' before 'double'
expected unqualified-id before '>' token
où tous les messages d'erreur sont dirigés à la linke marqué dans le code.
J'ai déjà je vous remercie pour vos idées, peu importe comment bien évident qu'ils sont.
- Explicite de qualification est requise en raison de sa configuration ne peut être déduite. Sans modèle, nous obtenons une erreur de syntaxe, ce qui sera perçu < que l'exploitant est inférieure à....Voir également la langue du point de vue d'auteur dans "13.6. Stroustrup, spec. édition. 935-936."
Vous devez vous connecter pour publier un commentaire.
La
template
mot-clé est ici nécessaire, commeobj
est une instance d'un typeFoo<T>
qui dépend le paramètre de modèleT
, et donc, le dessus doit être écrite comme suit:Lire @Johannes de réponse ici pour une explication détaillée:
Comme si souvent: une Fois que la question a été posté, la réponse est venue tout naturellement.
La correction de la mauvaise ligne de
donne les résultats escomptés.
Merci pour la lecture...
- Ce que cela pourrait être un cas de
foo.template bar‹ double >
?