對於我的數據結構類,我們被要求採用先前實現的平衡樹(來自之前的項目),並使用它來實現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」的名字的實現在(註釋中指出)。我對模板不太熟悉,所以我覺得我犯了一個非常愚蠢的錯誤。無論如何,如果您需要更多我的代碼或更多信息,請告訴我。任何幫助是極大的讚賞。
注意:我確定我的代碼有很多不良實踐等等。我還在學習。隨意指出,但我最關心的模板問題。
這將是有益的,如果你能發佈微創編譯例子 – 2012-04-24 01:58:04
對不起。我修改了帖子。第一塊應該是可編譯的。 – codepringle 2012-04-24 03:14:24