Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 导致模板化问题的嵌套类 对于我的数据结构类,我们被要求先从先前的项目中获取一个平衡的树,并使用它来实现C++标准映射类的一些部分。_Class_Templates_Map_Nested_Red Black Tree - Fatal编程技术网

Class 导致模板化问题的嵌套类 对于我的数据结构类,我们被要求先从先前的项目中获取一个平衡的树,并使用它来实现C++标准映射类的一些部分。

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

我认为最明显的第一步是模板化整个类,允许单独的键和存储类型。当然,我在模板设置方面遇到了问题。通常,我的模板工作直到我尝试模板化一个使用本地嵌套数据类型“rbNode”的函数。如果在函数定义中包含模板参数,则会出现语法错误。如果我不包括它们,就会出现“模板参数未包含”错误

这是在Visual Studio 2010中给出错误的类实现(错误如下所列):

#包括
#包括
模板
类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)
^^^^^^^^

如果您能发布一个可编译性最低的示例,那将很有帮助。我修改了帖子。第一个块应该是可编译的。如果您可以发布一个可编译的示例,这将非常有用。我修改了帖子。第一个块应该是可编译的。就是这样!非常感谢,就这样!非常感谢你。