我想比较两个指针的结构“节点”在类中的值。尽管我重载了运算符<,但我不确定这是否是正确的方法,因为当我运行代码时,我有时会得到正确答案,有时它会比较错误。这是可能的比较价值属性这种方式? (我必须使用指向Node的指针,但我不能以其他方式执行)。为什么每次运行程序时结果都不一样? 感谢您的帮助!运算符重载指针结构
#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;
}
欢迎堆栈溢出解决这个问题。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –
你的运算符采用'const Node&',而你传递'const TYPE&',但是'TYPE = Node *'而不是'Node'。在'test'中使用'TYPE = Node'并将'TYPE *'作为参数。然后问你自己,当你分配'n = new Node'时,其他'TYPE'如何工作。 – BeyelerStudios
您正在比较'Node *'(即:指向节点的指针);所以你要做的比较检查是检查内存地址是高于还是低于另一个。你会想要使用'test',这样你就可以比较'Node' **值**,或者你想*取消引用'compare'中的'Node *'(例如:'if( * n> * a)') –