所以我正在尝试为红黑树制作模板,但我无法弄清楚为什么某些函数无法编译。这是规范:
template <class myType>
class redBlackTree
{
private:
enum treeTraversalOptions {INORDER, PREORDER, POSTORDER, NONE};
enum nodeColor {RED, BLACK};
struct nodeType
{
myType keyValue;
nodeColor color;
unsigned int wrdCount;
nodeType *left;
nodeType *right;
nodeType *parent;
};
nodeType *root;
void destroyTree(nodeType *);
unsigned int countNodes(nodeType *) const;
unsigned int height(nodeType *) const;
nodeType * incCount(myType, nodeType *) const;
unsigned int getWordCount(myType, nodeType *) const;
void getMaxNode(nodeType *, unsigned int &, std::string &);
void printTree(nodeType *, treeTraversalOptions) const;
nodeType * rightRotate(nodeType *);
nodeType * leftRotate(nodeType *);
public:
redBlackTree();
~redBlackTree();
void destroyTree();
unsigned int countNodes() const;
void getMaxNode(unsigned int &, std::string &);
unsigned int height() const;
bool incCount(myType) const;
unsigned int getWordCount(myType) const;
void printTree(treeTraversalOptions) const;
void insert(myType);
};
这是问题函数之一:
template <class MyType>
unsigned int redBlackTree<myType>::getWordCount(myType word, nodeType *treeNode) const
{
if (treeNode)
{
if (treeNode->keyValue == word)
return treeNode->wrdCount;
else if (word < treeNode->keyValue)
getWordCount(word, treeNode->left);
else
getWordCount(word, treeNode->right);
}
return 0;
}
我得到的错误是:'myType'未在此范围内声明, 模板参数1无效,模板声明为'unsigned int getWordCount'。
我尝试在地方添加typename和scope resolution运算符,但我不明白为什么它不起作用。
答案 0 :(得分:0)
您在某些地方使用了MyType
,并在其他地方使用了myType
。
您可以通过更改
来解决此问题template <class MyType>
到
template <class myType>
或标准库中的一般约定至少是使用
template <class T>
它有助于区分模板类型和传统变量。