【问题标题】:C++ returning nested class with template on base class problemC++ 在基类问题上返回带有模板的嵌套类
【发布时间】:2010-12-21 02:29:40
【问题描述】:

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

// 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() 之前

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

【问题讨论】:

    标签: c++ class templates nested


    【解决方案1】:

    你需要typename:

    typename A<T>::B
    

    向编译器表明A&lt;T&gt;::B 是一种类型。这是good explanation 为什么。

    B 是什么取决于A&lt;T&gt; 是什么,这称为依赖。每当您从类或结构中获取类型并且它依赖于模板时,您都需要使用typename。

    【讨论】:

    • 非常感谢!我会看看@typename!
    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2011-05-04
    • 2012-05-04
    • 1970-01-01
    • 2014-03-05
    • 2018-11-08
    相关资源
    最近更新 更多