[英]Member function of a templated class can't return a pointer to member structure?
这段代码不会编译(给出错误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()
{}
您的方法有一些错误。
1)返回类型的范围必须适当限定。
2)如果是A::<T>::B
实例,而不是B
,则必须设置key
。
尝试这个:
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;
}
返回类型应该是类型名typename A<T>::B*
,而不仅仅是B*
:
template<typename T>
typename A<T>::B* A<T>::foobar(T key)
{
//..
}
注意返回类型中的typename
关键字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.