C++ 如何在模板类中使用嵌套结构/类类型作为返回值?
我目前正在编写一些BST模板类作为execise 但我遇到的一个问题使我困惑 这是我写在头文件中的代码 我只在这里粘贴导致错误的部分C++ 如何在模板类中使用嵌套结构/类类型作为返回值?,c++,c++11,templates,auto,C++,C++11,Templates,Auto,我目前正在编写一些BST模板类作为execise 但我遇到的一个问题使我困惑 这是我写在头文件中的代码 我只在这里粘贴导致错误的部分 template<typename Type> class TestCls { struct Node { Type data; Node* LeftChild; Node* RightChild; }; Node* pRoot; public: Node* Get
template<typename Type>
class TestCls
{
struct Node
{
Type data;
Node* LeftChild;
Node* RightChild;
};
Node* pRoot;
public:
Node* GetNode(Node*& someroot);
};
template<typename Type>
Node * TestCls<Type>::GetNode(Node*& someroot)
{
return NULL;
}
代码将被成功编译
那么第一版有什么问题?
如何正确使用嵌套结构/类类型作为返回值?模板
template<typename Type>
typename TestCls<Type>::Node * TestCls<Type>::GetNode(Node*& someroot)
typename TestCls::Node*TestCls::GetNode(Node*&someroot)
节点
的作用域在类模板内<需要code>typename,因为它是一种依赖于type
参数的类型。使用尾部返回类型case可以避免这一切,因为它在您已经在TestCls::GetNode
中指定的范围内查找Node
,问题在于当您编写
template<typename Type>
Node * TestCls<Type>::GetNode(Node*& someroot)
{
return NULL;
}
但是,如果我使用像这样的自动返回类型[…],代码将被成功编译
没错
因为使用
auto
,您在方法名称后写入节点
,因此您处于类的范围解析中,因此无需显式显示它。@KillzoneKid-您是对的;我系统地忘记了typename
;谢谢
template<typename Type>
Node * TestCls<Type>::GetNode(Node*& someroot)
{
return NULL;
}
template<typename Type>
typename TestCls<Type>::Node * TestCls<Type>::GetNode(Node*& someroot)
{
return NULL;
}