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!

Était-ce utile?

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 <=>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top