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&lt;DataType&gt;::findMax(BST&lt;DataType&gt;::BinaryNode&lt;DataType&gt; *t)findMin 上收到错误BinaryNode does not name a type

我尝试过使用BinaryNode&lt;Datatype&gt; *,但也有同样的错误。

【问题讨论】:

【参考方案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&lt;DataType&gt;::BinaryNode 是您在模板化 BST 类的主体外部寻找的内容。如果您指的是当前模板扩展的 BinaryNode,则可以在 BST 中简单地将其称为 BinaryNode。

(而且您必须提及您的体外定义对应于哪个模板参数化......正如@Svalorzen 更完整的答案所提到的那样。)

【讨论】:

以上是关于BinaryNode' 没有命名类型的主要内容,如果未能解决你的问题,请参考以下文章

错误:“ostream”没有命名类型

G ++“没有命名类型”

结构没有在c ++中命名类型

对象之前的预期')'。类没有命名类型[重复]

VCOS 没有命名类型

c_cpp 测试名称类型错误,如错误:'...'没有命名类型