2012-07-29 63 views
1

此代码不会编译(给出错误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() 
{} 

回答

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; 
} 
+0

新B()的意义是什么?我们是否在呼叫默认的初始化程序?与“新B”有什么不同? – 2012-07-29 09:42:00

+0

@IshanBhatnagar在这种情况下是没有区别的。你可以使用'new B',它也调用默认的构造函数。 – juanchopanza 2012-07-29 10:02:40

1

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

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

另请注意,返回类型typename关键字。