Class 导致模板化问题的嵌套类 对于我的数据结构类,我们被要求先从先前的项目中获取一个平衡的树,并使用它来实现C++标准映射类的一些部分。
我认为最明显的第一步是模板化整个类,允许单独的键和存储类型。当然,我在模板设置方面遇到了问题。通常,我的模板工作直到我尝试模板化一个使用本地嵌套数据类型“rbNode”的函数。如果在函数定义中包含模板参数,则会出现语法错误。如果我不包括它们,就会出现“模板参数未包含”错误 这是在Visual Studio 2010中给出错误的类实现(错误如下所列):Class 导致模板化问题的嵌套类 对于我的数据结构类,我们被要求先从先前的项目中获取一个平衡的树,并使用它来实现C++标准映射类的一些部分。,class,templates,map,nested,red-black-tree,Class,Templates,Map,Nested,Red Black Tree,我认为最明显的第一步是模板化整个类,允许单独的键和存储类型。当然,我在模板设置方面遇到了问题。通常,我的模板工作直到我尝试模板化一个使用本地嵌套数据类型“rbNode”的函数。如果在函数定义中包含模板参数,则会出现语法错误。如果我不包括它们,就会出现“模板参数未包含”错误 这是在Visual Studio 2010中给出错误的类实现(错误如下所列): #包括 #包括 模板 类myMap { 私人: //typedef对值_类型; 结构rbNode { //值_类型ref; int元素; rbNo
#包括
#包括
模板
类myMap
{
私人:
//typedef对值_类型;
结构rbNode
{
//值_类型ref;
int元素;
rbNode*左;
rbNode*对;
布尔红;
rbNode(int键)
{
左=空;
右=空;
//ref.first=键;
//ref.second=元素;
元素=键;
红色=真;
}
};
rbNode*根;
布尔搜索(int,rbNode*);
rbNode*LL_旋转(rbNode*);
};
模板
myMap::rbNode*myMap::LL_Rotation(rbNode*curr)//此行出错
{
rbNode*temp=curr->right;
当前->右侧=临时->左侧;
温度->左=当前;
当前->红色=1;
温度->红色=0;
返回温度;
}
但是,此函数编译得很好,上面的函数被注释掉了:
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;
}
模板
bool myMap::search(int键,rbNode*树)
{
如果(树!=NULL)
如果(树->元素==键)
返回true;
其他的
if(键<树->元素)
返回搜索(键,树->左);
其他的
返回搜索(键,树->右);
其他的
返回false;
}
特别是我
缺少“;”在“*”之前
和
缺少类型说明符-假定为int。注意:C++不支持默认INT/CODE
“LLRotation”名称的实现在(注释中指出)行中。我对模板制作不是很有经验,所以我觉得我犯了一个非常愚蠢的错误。无论如何,如果您需要更多我的代码或更多信息,请告诉我。非常感谢您的帮助
注意:我确信我的代码中有大量的错误做法等。我还在学习。请随意指出,但我最关心的是模板问题。您只是缺少了一个类型名作为依赖名称:
template <class key_type, class T>
typename myMap<key_type,T>::rbNode* myMap<key_type,T>::LL_Rotation(rbNode * curr)
^^^^^^^^
模板
typename myMap::rbNode*myMap::LL_旋转(rbNode*curr)
^^^^^^^^
您只是缺少了从属名称的typename
:
template <class key_type, class T>
typename myMap<key_type,T>::rbNode* myMap<key_type,T>::LL_Rotation(rbNode * curr)
^^^^^^^^
模板
typename myMap::rbNode*myMap::LL_旋转(rbNode*curr)
^^^^^^^^
如果您能发布一个可编译性最低的示例,那将很有帮助。我修改了帖子。第一个块应该是可编译的。如果您可以发布一个可编译的示例,这将非常有用。我修改了帖子。第一个块应该是可编译的。就是这样!非常感谢,就这样!非常感谢你。