2012-06-13 44 views
2

試圖讓使用模板 inary 小號目錄操作搜索牛逼 REE(BST的簡稱)。試圖創建一個使用類模板的新實例,意外的錯誤

當我嘗試創建我的BST的新實例時,出現意外錯誤。我希望這個解決方案不涉及指針,因爲我想把它們保持在最低限度。

現在我有:

template <typename Type> 
class BST {     // The binary search tree containing nodes 
private: 
    BSTNode<Type> *root; // Has reference to root node 

public: 
    BST(); 
    bool add (int, Type); 
}; 

和節點類型:

編輯:當我切出的代碼未牽累文字,我忘了構造,現在它已添加

template <typename Type> 
class BSTNode { // Binary Search Tree nodes 
private: 
    int key;  // we search by key, no matter what type of data we have 
    Type data; 
    BSTNode *left; 
    BSTNode *right; 

public: 
    BSTNode (int, Type&); 
    bool add (int, Type); 
}; 

EDIT2:下面是實際的構造

template <typename Type> 
BSTNode<Type>::BSTNode (int initKey, Type &initData) { 
    this->key = initKey; 
    this->data = initData; 
    this->left = NULL; 
    this->right = NULL; 
} 

我想嘗試和測試,如果什麼工作/不工作

BSTNode<int> data = new BSTNode (key, 10); 

,我也得到:預期BSTNode之前類型說明符。我不知道我在做什麼錯,但我希望的一件事是我不必使用數據作爲指針。

BSTNode<int> data = new BSTNode<int> (key, 10); 

也不起作用,似乎它認爲<int>< & int>因爲你是實例不匹配

回答

6

首先,你需要在賦值的RHS完全指定類型,並與new動態分配的節點時,LHS應該是一個指針:

BSTNode<int>* data = new BSTNode<int> (key, 10); 
      ^     ^

如果你不需要一個節點指針,然後使用

BSTNode<int> data(key, 10); 

其次,你的BSTNode<T>類沒有一個構造函數接受一個int和一個Type,所以你也需要提供。

template <typename Type> 
class BSTNode { 
public: 
    BSTNode(int k, const Type& val) : key(k), data(val), left(0), right(0) { .... } 
}; 
+0

忘了粘貼它,現在在這裏,是否有任何錯誤? – Kalec

+0

@Kalec構造函數是可以的,但更好的使用初始化列表來避免不必要的默認初始化/賦值。 – juanchopanza

+0

@Kalec,你可能不想在構造函數中按值傳遞'Type'。 – juanchopanza

相關問題