2014-11-06 85 views
1

我正在製作一個模板化類,它由兩個鏈接在一起的二叉搜索樹組成。例如,一個字符串樹和一個整數樹。如何鏈接兩種不同類型的節點? (模板類)

但是,我在創建鏈接時遇到了問題。

我有什麼節點:

template <class T> 
class Node { 

T data; 
Node* link; 
Node* left; 
Node* right; 

} 

如果我叫

Node<string> newstring = new Node<string>(); 
Node<int> newint = new Node<int>(); 
newstring -> link = newint; 
newint -> link = newstring; 

我會得到

error: cannot convert ‘Node<int>*’ to ‘Node<std::basic_string<char> >* 
error: cannot convert ‘Node<std::basic_string<char> >* to ‘Node<int>*’ 

我怎麼能連接兩個不同類型的節點?

+2

真正的問題是「你爲什麼要這麼做?」它看起來像你的代碼的設計問題。 – Caduchon 2014-11-06 08:55:17

+0

首先認爲Node應該包含一些數據,而不僅僅是鏈接。那麼你的問題會有所不同。 – 2014-11-06 08:56:29

回答

1

您可以通過一個基類實現它:

class BaseNode { 
}; 

template <class T> 
class Node : public BaseNode { 
public: 
    BaseNode * link; 
    BaseNode * left; 
    BaseNode * right; 
}; 

然後

Node<string> * newstring = new Node<string>(); 
Node<int> * newint = new Node<int>(); 
newstring -> link = newint; 
newint -> link = newstring; 

也許你需要添加一些代碼,以確定什麼是真正的類型,指針指向的。這應該是一個設計問題。

1

我會研究基類。

看起來像節點的設計有問題。 我可能會做類似於

template <class T, class S> 
class Node { 

T data; 
Node<S,T>* link; 
Node<T,S>* left; 
Node<T,S>* right; 

}