Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在模板类中使用嵌套结构/类类型作为返回值?_C++_C++11_Templates_Auto - Fatal编程技术网

C++ 如何在模板类中使用嵌套结构/类类型作为返回值?

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

我目前正在编写一些BST模板类作为execise 但我遇到的一个问题使我困惑

这是我写在头文件中的代码 我只在这里粘贴导致错误的部分

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