【发布时间】:2018-07-16 20:22:13
【问题描述】:
我目前正在编写一些 BST 模板类作为执行 但是我遇到的一个问题让我很困惑。
这是我写在头文件中的代码 我这里只粘贴导致错误的部分
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;
}
我用VS2015编译,报错如下:
错误 C2059 语法错误:''
错误 C2923“TestCls”:“Type”不是参数“Type”的有效模板类型参数
错误 C2923“TestCls”:“Type”不是参数“Type”的有效模板类型参数
错误 C2065“类型”:未声明的标识符
错误 C2065“类型”:未声明的标识符
编译器似乎无法识别 GetNode() 函数定义头部的“Node *”。
但是,如果我使用这样的自动返回类型:
auto TestCls<Type>::GetNode(Node*& someroot)->Node*&
{
return NULL;
}
代码将编译成功。
那么第一个版本有什么问题? 如何正确使用嵌套结构/类类型作为返回值?
【问题讨论】: