我正在制作一个模板化的类,它由两个链接在一起的二叉搜索树组成。 例如,字符串树和整数树。
但是,我在创建链接时遇到了麻烦。
我对节点的所作所为:
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>*’
如何链接两种不同类型的节点?
答案 0 :(得分: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 :(得分:1)
我会研究基类。
看起来Node的设计有问题。 我可能会做类似
的事情template <class T, class S>
class Node {
T data;
Node<S,T>* link;
Node<T,S>* left;
Node<T,S>* right;
}