此代码无法编译(给出错误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()
{}
答案 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
关键字。