模板化类的成员函数不能返回指向成员结构的指针?

时间:2012-07-29 08:45:45

标签: c++ templates

此代码无法编译(给出错误C2059,C2065,C2072,C2143,C2146,C2447,C2470,C4430) 但是如果你将B *改为像int这样的inbuild类型。 有什么想法吗?

template <typename T>
class A
{
private:
    struct B
    {
        T key;
    };

    B* foobar(T key);

};

template <typename T>
B* A<T>::foobar(T key) 
{
    B* ptr = new B;
    B->key = key;
    return ptr;
}

int main()
{}

2 个答案:

答案 0 :(得分:4)

您的方法中有一些错误。

1)返回类型的范围必须合格。

2)如果是key个实例,则必须设置A::<T>::B,而不是B

试试这个:

template <typename T>
typename A<T>::B* A<T>::foobar(T key) // fix error 1)
{
    B* ptr = new B();
    ptr->key = key;  // fix error 2)
    return ptr;
}

答案 1 :(得分:1)

返回类型应为typename A<T>::B*,而不仅仅是B*

template<typename T>
typename A<T>::B* A<T>::foobar(T key)
{
   //..
}

请注意返回类型中的typename关键字。