1

此代码无法编译(给出错误 C2059、C2065、C2072、C2143、C2146、C2447、C2470、C4430)但如果将 B* 更改为 int 等内置类型,则可以。有任何想法吗?

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()
{}
4

2 回答 2

4

您的方法中有一些错误。

1) 返回类型的范围必须正确限定。

2)您必须设置keyif aA::<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;
}
于 2012-07-29T08:50:14.700 回答
1

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

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

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

于 2012-07-29T08:50:32.777 回答