Pergunta

Eu estou tentando criar um objeto da lista, com a classe iterator dentro aninhada para entender como ele funciona. Em algum método, eu estou tentando retornar um objeto iterador, mas ele não funciona. Eu criei um exemplo para mostrar o 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);
}

O erro está perto dessas linhas:

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

O compilador me diz que eu estou faltando um; antes de A :: B :: returnThis ()

Eu estou tentando resolver este problema por dias e não consigo encontrar uma maneira de fazê-lo funcionar ... Eu realmente aprecio alguma ajuda. Agradecemos antecipadamente!

Foi útil?

Solução

Você precisa typename:

typename A<T>::B

Para indicar ao compilador que A<T>::B é um tipo. Aqui está um boa explicação porquê.

O que B é depende do que A<T> é, isso é chamado de dependência. Toda vez que você está recebendo um tipo de fora de uma classe ou estrutura, e é dependente de um modelo, você vai precisar usar typename.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top