[英]How can I link Nodes of two different types? (templated classes)
我正在制作一個包含兩個鏈接在一起的二進制搜索樹的模板化類。 例如,一棵字符串樹和一個整數樹。
但是,我在創建鏈接時遇到了麻煩。
我對節點有什么:
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>*’
如何鏈接兩種不同類型的節點?
您可以通過基類來實現:
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;
也許您需要添加一些代碼來識別指針所指向的實際類型。 這應該是一個設計問題。
我將研究基類。
看來Node的設計有問題。 我可能會做類似的事情
template <class T, class S>
class Node {
T data;
Node<S,T>* link;
Node<T,S>* left;
Node<T,S>* right;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.