C ++ retournant une classe imbriquée avec template sur un problème de classe de base
Question
J'essaie de créer un objet de liste, avec la classe d'itérateur imbriquée à l'intérieur pour comprendre son fonctionnement. D'une certaine manière, j'essaie de retourner un objet itérateur, mais cela ne fonctionne pas. J'ai créé un exemple pour montrer le problème:
// CLASS A
template <class T>
class A
{
public:
class B;
A(){}
};
// CLASS B
template <class T>
class A<T>::B
{
private:
int varB;
public:
B(B& b);
B(const int&);
B returnThis();
};
template <class T>
A<T>::B::B(const int& value)
{
varB = value;
}
template <class T>
A<T>::B::B(B& b)
{
varB = b.varB;
}
template <class T>
A<T>::B A<T>::B::returnThis()
{
return *this;
}
// MAIN
void main()
{
A<int>::B classB(10);
}
L'erreur est proche de ces lignes:
template <class T>
A<T>::B A<T>::B::returnThis()
Le compilateur me dit qu'il me manque un; avant A :: B :: returnThis ()
J'essaie de résoudre ce problème pendant des jours et je ne trouve pas le moyen de le faire fonctionner ... J'apprécierais volontiers de l'aide. Merci d'avance!
La solution
Vous avez besoin de typename
:
typename A<T>::B
Pour indiquer au compilateur que A<T>::B
est un type. Voici une bonne explication .
La nature de B
dépend de ce que A<T>
est appelé dépendance. Chaque fois que vous récupérez un type dans une classe ou une structure et que cela dépend d'un modèle, vous devez utiliser <=>.