2012-12-05 160 views
1

意外的錯誤,我寫一個函數來複制模板二叉樹。到目前爲止,我有這樣的:,我似乎無法修復

template <typename Item, typename Key> 
Node* BSTree<Item,Key>::copy(Node* root) { 
    if(root == NULL) return NULL; 

    Node* left; 
    Node* right; 
    Node* to_return; 

    left = copy(root->left()); 
    right = copy(root->right()); 

    to_return = new Node(root->data()); 
    to_return->left() = left; 
    to_return->right() = right; 

    return to_return; 
} 

但是,當我試圖編譯程序時,我得到我無法弄清楚如何解決多個錯誤。所有這些都發生在模板聲明之後的行中。

1)錯誤C2143:語法錯誤:缺少 ';'之前 '*'

2)錯誤C4430:缺少類型說明 - INT假定

3)錯誤C2065:項「:未聲明的標識符

4)錯誤C2065:密鑰':未聲明的標識符

在程序中我所有的其他功能都能正確編譯,並且對模板沒有任何問題,所以我不確定爲什麼這個功能會這樣。它已經在頭文件中聲明,並且肯定有一個返回類型分配給它,所以我很難過。

回答

2

NodeBSTree一個子類?如果是這樣,它不是在範圍上的返回類型,所以你必須限定它:

template <typename Item, typename Key> 
typename BSTree<Item,Key>::Node* BSTree<Item,Key>::copy(Node* root) 

如果你有C++ 11然後auto工程太:

template <typename Item, typename Key> 
auto BSTree<Item,Key>::copy(Node* root) -> Node 
+0

太謝謝你了!這正是問題所在! –

+0

@BrandonBosso剛剛意識到參數在範圍之內,所以我更新了代碼以防萬一您錯過了它。 – Pubby