C++在基类问题上返回带有模板的嵌套类

Val*_*res 9 c++ templates nested class

我正在尝试创建一个列表对象,嵌套在其中的迭代器类以了解它是如何工作的.在某些方法中,我试图返回一个迭代器对象,但它不起作用.我创建了一个示例来显示问题:

// 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);
}
Run Code Online (Sandbox Code Playgroud)

错误接近这些行:

template <class T>
A<T>::B A<T>::B::returnThis()
Run Code Online (Sandbox Code Playgroud)

编译器告诉我,我错过了一个; 在A :: B :: returnThis()之前

我试图解决这个问题好几天,我找不到办法使它工作......我真的很感激一些帮助.提前致谢!

GMa*_*ckG 14

你需要typename:

typename A<T>::B
Run Code Online (Sandbox Code Playgroud)

向编译器指示该A<T>::B类型.这是一个很好的解释原因.

什么B是取决于什么A<T>,这被称为依赖.无论何时从类或结构中获取类型,并且它依赖于模板,您都需要使用typename.