对于我的Data Structures类,我们被要求采用先前实现的平衡树(来自之前的项目)并使用它来实现C ++标准地图类的部分。
http://cplusplus.com/reference/stl/map/
我认为最明显的第一步是模板化整个类,允许单独的键和存储类型。当然,我遇到了模板问题。通常我的模板工作,直到我尝试模板使用本地嵌套数据类型“rbNode”的函数。如果我在函数定义中包含模板参数,则会出现语法错误。如果我把它们遗漏,我会得到“模板参数不包含”的错误。
这是在Visual Studio 2010中提供错误的类实现(下面列出的错误):
#include <cstdlib>
#include <iostream>
template <class key_type, class T>
class myMap
{
private:
//typedef pair<const key_type, T> value_type;
struct rbNode
{
//value_type ref;
int element;
rbNode * left;
rbNode * right;
bool red;
rbNode(int key)
{
left = NULL;
right = NULL;
//ref.first = key;
//ref.second = element;
element = key;
red = true;
}
};
rbNode * root;
bool search(int , rbNode *);
rbNode * LL_Rotation(rbNode *);
};
template <class key_type, class T>
myMap<key_type,T>::rbNode* myMap<key_type,T>::LL_Rotation(rbNode * curr) // errors occur on this line
{
rbNode * temp = curr->right;
curr->right = temp->left;
temp->left = curr;
curr->red = 1;
temp->red = 0;
return temp;
}
然而,这个函数编译好了以上函数注释掉了:
template <class key_type,class T>
bool myMap<key_type,T>::search(int key,rbNode * tree)
{
if(tree!=NULL)
if(tree->element==key)
return true;
else
if(key< tree->element)
return search(key,tree->left);
else
return search(key,tree->right);
else
return false;
}
特别是,我正在
missing ';' before '*'
和
missing type specifier - int assumed. Note: C++ does not support default-int
在线上,“LLRotation”的名称的实现在(评论中指出)。我对模板不是很有经验,所以我觉得我犯的是一个非常愚蠢的错误。无论如何,如果您需要更多我的代码或更多信息,请告诉我。任何帮助是极大的赞赏。
注意:我确定我的代码中有很多不良做法等等。我还在学习。请随意指出它们,但我最关心的是模板问题。
答案 0 :(得分:0)
您只是错过了typename
的依赖名称:
template <class key_type, class T>
typename myMap<key_type,T>::rbNode* myMap<key_type,T>::LL_Rotation(rbNode * curr)
^^^^^^^^