我在.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> *,但是也有相同的错误。

最佳答案

您没有为函数的返回参数指定类型,而是为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,除非您将其明确指定,否则编译器将无法知道。

关于c++ - BinaryNode'没有命名类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26350483/

10-10 21:23