Domanda

Sto cercando di creare un oggetto elenco, con la classe iteratore annidata all'interno per capire come funziona. In qualche metodo, sto cercando di restituire un oggetto iteratore ma non funziona. Ho creato un esempio per mostrare il problema:

// 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'errore è vicino a quelle righe:

template <class T>
A<T>::B A<T>::B::returnThis()

Il compilatore mi dice che mi manca un; prima di A :: B :: returnThis ()

Sto cercando di risolvere questo problema da giorni e non riesco a trovare un modo per farlo funzionare ... Gradirei davvero un aiuto. Grazie in anticipo!

È stato utile?

Soluzione

Hai bisogno di typename:

typename A<T>::B

Per indicare al compilatore che A<T>::B è un tipo. Ecco una una buona spiegazione perché.

Cosa è B dipende da cosa è A<T>, questo si chiama dipendenza. Ogni volta che stai ottenendo un tipo da una classe o struttura, e dipende da un modello, dovrai utilizzare <=>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top