BinaryNode' 没有命名类型
Posted
技术标签:
【中文标题】BinaryNode\' 没有命名类型【英文标题】:BinaryNode' does not name a typeBinaryNode' 没有命名类型 【发布时间】:2014-10-13 23:30:26 【问题描述】:我在 .h
标头中有一个带有结构的类:
template <typename DataType>
class BST
public:
struct BinaryNode
// variables
;
//functions
private:
BinaryNode *findMin(BinaryNode *t) const; //done
BinaryNode *findMax(BinaryNode *t) const; //done
//other functions and variables
;
当我在.cpp
中实现这些功能时:
template <typename DataType>
BinaryNode* BST<DataType>::findMin(BST<DataType>::BinaryNode<DataType> *t)
//do something
template <typename DataType>
BinaryNode* BST<DataType>::findMax(BST<DataType>::BinaryNode<DataType> *t)
//do something
我在BinaryNode* BST<DataType>::findMax(BST<DataType>::BinaryNode<DataType> *t)
和findMin
上收到错误BinaryNode does not name a type
我尝试过使用BinaryNode<Datatype> *
,但也有同样的错误。
【问题讨论】:
【参考方案1】:您没有为函数的返回参数指定类型,而是为BinaryNode
输入参数提供了模板参数。
template <typename DataType>
class BST
public:
struct BinaryNode
// variables
;
//functions
private:
BinaryNode *findMin(BinaryNode *t) const; //done
BinaryNode *findMax(BinaryNode *t) const; //done
//other functions and variables
;
template <typename DataType>
typename BST<DataType>::BinaryNode* BST<DataType>::findMin(BST<DataType>::BinaryNode *t) const
//do something
template <typename DataType>
typename BST<DataType>::BinaryNode* BST<DataType>::findMax(BST<DataType>::BinaryNode *t) const
//do something
或缩短输入参数:
template <typename DataType>
typename BST<DataType>::BinaryNode* BST<DataType>::findMax(BinaryNode *t) const
//do something
请注意,需要完整指定返回参数,因为当编译器到达那里时,它还不知道它正在读取 BST 类的函数实现。此外,typename
是必需的,因为在该上下文中,BinaryNode
是依赖于模板的类型名,除非您明确说明,否则编译器无法知道这一点。
【讨论】:
【参考方案2】:BinaryNode 不在全局命名空间中。此外,它不是模板结构,它只是一个恰好被模板化的类中的结构。
所以BST<DataType>::BinaryNode
是您在模板化 BST 类的主体外部寻找的内容。如果您指的是当前模板扩展的 BinaryNode,则可以在 BST 中简单地将其称为 BinaryNode。
(而且您必须提及您的体外定义对应于哪个模板参数化......正如@Svalorzen 更完整的答案所提到的那样。)
【讨论】:
以上是关于BinaryNode' 没有命名类型的主要内容,如果未能解决你的问题,请参考以下文章