C++返回具有基类模板的嵌套类问题

9

我正在尝试创建一个列表对象,并在其中嵌套迭代器类以了解其工作原理。 在某些方法中,我尝试返回一个迭代器对象,但它不起作用。 我创建了一个示例来展示这个问题:

// 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);
}

错误出现在以下几行代码附近:
template <class T>
A<T>::B A<T>::B::returnThis()

编译器告诉我在A::B::returnThis()之前缺少一个分号;
我试图解决这个问题已经好几天了,但是我找不到让它工作的方法…… 非常感谢帮助。 提前致谢!
1个回答

17

你需要使用typename

typename A<T>::B
为了告诉编译器,A<T>::B 是一个类型。这里有一个好的解释为什么需要这样做。 B 取决于 A<T> 的具体情况,这称为依赖关系。每当你从类或结构中获取一个与模板相关的类型时,都需要使用 typename

非常感谢!我会仔细看一下 typename! - Vallières

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接