【发布时间】:2017-05-29 18:45:48
【问题描述】:
我正在尝试比较两个指向类中结构“节点”的指针的值。尽管我重载了
#include <iostream>
#include "compare.h"
struct Node {
int value;
bool operator >(const Node &n) { return value > n.value ; };
bool operator <(const Node &n) { return value < n.value; };
};
int main()
{
Node *a;
a = new Node;
a->value = 1;
test<Node *> t;
t.compare(a);
delete a;
return 0;
}
这里是 compare.h 文件:
template<class TYPE>
class test {
public:
void compare(const TYPE n);
test();
~test();
private:
TYPE n;
};
template<class TYPE>
inline void test<TYPE>::compare(const TYPE a)
{
if (n > a)
std::cout << "n > a";
else if (a>n)
std::cout << "n < a";
}
template<class TYPE>
inline test<TYPE>::test()
{
n = new Node;
n->value = 2;
}
template<class TYPE>
inline test<TYPE>::~test()
{
delete n;
}
【问题讨论】:
-
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
-
您的操作员接受
const Node&,而您传递的是const TYPE&,但TYPE = Node*而不是Node。使用TYPE = Node并将TYPE*作为test中的参数。然后问问自己,当您分配n = new Node时,其他TYPE将如何工作。 -
您正在比较
Node*(即:指向节点的指针);所以你正在做的比较检查是检查内存地址是高于还是低于另一个。您可能想要使用test<Node>以便比较Node值,或者您想要取消引用compare中的Node*(例如:if (*n > *a))
标签: c++ pointers overloading operator-keyword