クラス内の構造体 "Node"への2つのポインタの値を比較しようとしています。 <演算子がオーバーロードされましたが、コードを実行するときに正しい答えが得られることがあり、時には誤って比較することがあるため、正しい方法であるかどうかはわかりません。この方法で値のプロパティを比較することは可能ですか? (私はノードへのポインタを使用する必要があります、私は他の方法で行うことはできません)。プログラムを実行するたびに結果が異なるのはなぜですか? 助けてくれてありがとう!ここでは、あなたのtest::compare
機能でテンプレートパラメータを持つtest
Node*
構造体へのポインタの演算子オーバーロード
test<Node *> t;
をインスタンス化している
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'ではありません。 'TYPE = Node'を使って、' test'であなたの引数として 'TYPE *'を取ってください。 'n = new Node'を指定すると、他の' TYPE'がどのように動作するのか、自分自身に尋ねます。 – BeyelerStudios
'Node *'(つまり、ノードへのポインタ)を比較しています。あなたがやっている比較チェックは、メモリアドレスが別のものより高いか低いかをチェックすることです。 'test'を使って 'Node' **値**を比較するか、' compare'の 'Node *'を* dereference *したいと思うでしょう( 'if( * n> * a) ') –