我想比較兩個指針的結構「節點」在類中的值。儘管我重載了運算符<,但我不確定這是否是正確的方法,因爲當我運行代碼時,我有時會得到正確答案,有時它會比較錯誤。這是可能的比較價值屬性這種方式? (我必須使用指向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)') –