我在.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/