【发布时间】:2016-04-04 18:26:37
【问题描述】:
我正在编写一个二叉树类模板。当我添加一个新节点时,我会检查新节点是小于还是大于当前节点。
我在类类型(Object)中重载了 运算符并且可以正常工作,但是模板没有调用重载的运算符,而是使用编译器生成的。
object.cc - 对象之间的比较在模板之外工作
bool Object::operator<(const Object& par_other) const
{
printf("\n <");
return id_ < par_other.id_; //assume that you compare the record based on a
}
编辑 1:添加了一些请求的代码。谢谢你的帮助:)
struct Node {
T* value;
Node* left;
Node* right;
};
template <class T>
void BinaryTree<T>::add(T* par_T, Node* par_node) {
if (par_node == nullptr) {
par_node->left = nullptr;
par_node->value = par_T;
par_node->right = nullptr;
} else {
if (par_node->value == nullptr) {
par_node->value = par_T;
} else if (par_node->value > par_T) {
if (!par_node->right) {
par_node->right = createNode();
}
add(par_T, par_node->right);
} else if (par_node->value < par_T) {
if (!par_node->left) {
par_node->left = createNode();
}
add(par_T, par_node->left);
}
}
【问题讨论】:
-
仔细检查您是在比较实例,而不是指针,即
-
提供您在其中比较实例的代码段
-
你有什么问题?
-
您正在比较指针,您不能重载运算符
-
我应该如何比较这个? ¿ *(par_node->value)
标签: c++ templates overloading operator-keyword