2009-11-28 38 views
0

我知道這可能是第一年的問題,但我遇到了一些模板問題,我還沒有找到合適的答案。我試圖實例化一個新的模板類,像這樣:超級基本聲明新的模板類對象問題

TreeNode <T>newLeft = new TreeNode(root->data[0]); 

這是指的一個構造函數,看起來像:

template <class T> 
//paramerter receving constructor 
TreeNode<T>::TreeNode(T item){ 
    data[0] = item; 
    nodeType = 2; 
}//end 

而且,我發現了以下錯誤:
錯誤: 'TreeNode'前預期的類型說明符
錯誤:預計';' 「樹節點」之前

什麼是類型說明符?如果有必要,我可以提供更多的代碼,而且我知道我之前提過了一個關於此代碼的問題,並且我確信我會因此而惹火;但我仍然有問題...

編輯: 這是它在使用的功能:

template <class T> 
void TwoThreeFourTree<T>::splitRoot(){ 
    TreeNode <T> newRoot; 
    newRoot = new TreeNode(root->data[1]); 

    TreeNode <T>newLeft = new TreeNode(root->data[0]); 

    TreeNode <T>newRight = new TreeNode(root->data[2]); 

    newRoot.child[0] = newLeft; 
    newRoot.child[1] = newRight; 

    newLeft.child[0] = root.child[0]; 
    newLeft.child[1] = root.child[1]; 

    newRight.child[0] = root.child[2]; 
    newRight.child[1] = root.child[3]; 

    root = newRoot; 

}

而每一次我嘗試創建一個新的對象,我得到了相同的兩個錯誤在功能

+0

第一個聲明(「newLeft」)是否出現在某個模板函數或模板類中? 「newLeft」類型的類型參數「T」的使用不能出現在非模板定義中。 – seh 2009-11-28 00:34:31

回答

4

您在new忘記T,和指針:

TreeNode<T>* newRoot; 
newRoot = new TreeNode<T>(root->data[1]); 

請注意,您需要修正指針在各處的使用情況,而不僅僅是在這裏。請記住,這不是Java或C#,並且TreeNode<T>類型的變量不是參考T - 它一個T.並且要構建樹,您需要引用 - 即指針。雖然你也可以考慮在這裏使用std::auto_ptr來保證清理。