如何在模板类中使用嵌套的结构/类类型作为返回值
How to use a nested struct/class type as a return value, in a template class?
我当前将一些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;
}
我使用VS2015对其进行编译,然后使用以下错误:
错误C2059语法错误:''错误c2923'testcls':'type'不是参数'type'type'
的有效模板类型参数错误c2923'testcls':'type'不是参数'type'type'
的有效模板类型参数错误C2065'类型':未申报的标识符
错误C2065'类型':未申报的标识符
看来GetNode()
函数定义头的" Node *
"未被编译器识别。
但是,如果我使用这样的自动返回类型:
auto TestCls<Type>::GetNode(Node*& someroot)->Node*&
{
return NULL;
}
代码将成功编译。
那么第一个版本中有什么问题?如何正确使用嵌套的结构/类类型作为返回值?
template<typename Type>
typename TestCls<Type>::Node * TestCls<Type>::GetNode(Node*& someroot)
Node
在类模板内范围内。需要typename
,因为它是一种取决于Type
参数的类型。这一切都可以通过尾随的返回类型案例来避免,因为它在TestCls<Type>::GetNode
中已经指定的范围中查找Node
。
问题是写
时template<typename Type>
Node * TestCls<Type>::GetNode(Node*& someroot)
{
return NULL;
}
什么是 方法的名称(GetNode
(不在类的名称分辨率范围之内。因此,您必须阐明
template<typename Type>
typename TestCls<Type>::Node * TestCls<Type>::GetNode(Node*& someroot)
{
return NULL;
}
但是,如果我使用这样的自动返回类型[...],代码将成功编译。
正好。
因为使用auto
,您在方法的名称之后编写Node
,因此您处于类的范围分辨率,因此无需阐明它。
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- <badref> 当使用 CallInst::CreateMalloc 作为结构类型时
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 查找声明为结构类型 C++ 的数组末尾
- C++ - 将结构类型的数组传递给用户定义的函数
- PowerShell 使用结构类型参数调用 C++ DLL 的导出函数
- NTTP 的结构类型:为什么所有成员都必须是公共的?
- 当我尝试访问结构类型时,我收到 std::bad_variant_access 异常
- 承诺可以使用结构类型吗?
- 填充模板化结构类型的结构成员
- 如何为结构类型变量赋值
- 在 c++ 中将结构类型转换为无符号字符*
- 在 c++ 中将一种结构类型分配给另一种类型
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- 确定输入"conscalc: calc"的类型时出错。不能联合编码器。具有不同字段集的结构类型
- 无法将结构类型的标识符设置为 nullptr;
- 结构类型成员的默认构造函数中的默认参数
- 如何在执行期间终止(或返回)具有结构类型的自动函数
- 在 stl 中迭代结构类型的队列