Typedef intérieur de la classe de modèle ne fonctionne pas
J'ai un problème avec le code suivant:
template <typename U>
class lamePtr
{
public:
typedef U* ptr;
};
template <typename U>
class smarterPointer
{
public:
void funFun()
{
typedef lamePtr<U> someType;
someType::ptr query;
}
};
Comme vous le voyez, j'ai une définition de type à l'intérieur de lamePtr. À l'intérieur de smarterPointer classe j'ai une fonction funFun(). Que suis-je en train d'essayer de faire est de faire un autre typedef someType. Jusqu'à cette ligne, tout fonctionne bien jusqu'à ce que nous arrivons à la ligne avec someType::ptr requête.
Ce que je veux, ici, de se produire est que "requête" deviendra lamePtr< U >::ptr (une simple valeur, pas une définition de type ;). Cependant, j'obtiens des erreurs de compilation (gcc 4.4.3):
temp.cpp: In member function ‘void smarterPointer<U>::funFun()’:
temp.cpp:15: error: expected ‘;’ before ‘query’
Ce que je fais mal?
Liés à, avec beaucoup d'informations sur les raisons de l'
Dans l'avenir, n'essayez pas de formater votre code avec les balises html. Il suffit d'entrer comme ça, sélectionner tout, puis cliquez sur le
Merci, je vais garder cela à l'esprit pour l'avenir. Merci pour la référence à James, je vais passer un peu de temps
typename
est nécessaire: Où et pourquoi dois-je mettre template
et typename
sur dépendante des noms?Dans l'avenir, n'essayez pas de formater votre code avec les balises html. Il suffit d'entrer comme ça, sélectionner tout, puis cliquez sur le
{}
bouton.Merci, je vais garder cela à l'esprit pour l'avenir. Merci pour la référence à James, je vais passer un peu de temps
OriginalL'auteur Melon | 2011-04-02
Vous devez vous connecter pour publier un commentaire.
someType
, commelamePtr<U>
est une "personne à charge nom". Cela dépend de ce queU
est de savoir si ou non il est un membreptr
et, si oui, de quel genre de "chose" qui est membre.Bien sûr, vous savoir que pour tous les
T
,lamePtr<T>::ptr
est un type, mais à ce stade de la compilation de l'analyseur ne sais pas qui.Utilisation le
nom
mot clé de faire allusion à l'analyseur que c'est un type. Le reste sera résolu plus tard dans le processus de compilation. Juste un peu de C++ caprice.Pas de problème 🙂
OriginalL'auteur Lightness Races in Orbit
Vous avez besoin de la
typename
mot-clé pour indiquer quesomeType::ptr
est un type.Voir Officiellement, qu'est-ce que le nom? pour plus de détails.
Quelques documents à lire si vous êtes intéressé: comeaucomputing.com/techtalk/templates/#typename
OriginalL'auteur kennytm