0

C++ クラスで < および > 演算子をオーバーロードしようとしています

 template <typename T>
 bool BinaryTree<T>::operator < (BinaryTree<T> &B) {
   return (this->count < B.setCount(0));
 } 

template <typename T>
float BinaryTree<T>::setCount(float c)
{
  count += c;
  return count;
}

setCount(0) は B obj のカウントを返します。しかし、これは比較された数値に関係なく、常に true を出力します。

私のコードをに変更します

template <typename T>
bool BinaryTree<T>::operator < (const BinaryTree<T> &B) {
  return (this->count < B.count);
}


printf("%c %lf\n", tree[0]->getData(), tree[0]->setCount(0));
printf("%c %lf\n", tree[1]->getData(), tree[1]->setCount(0));

Output >

a 0.750000
b 0.250000

if(tree[0] < tree[1])
   printf("0 < 1\n");
else printf("1 > 0\n");

Output > 

0 < 1  
4

1 に答える 1

4

これ:

  printf("%c %lf\n", tree[0]->getData(), tree[0]->setCount(0));
  printf("%c %lf\n", tree[1]->getData(), tree[1]->setCount(0));

あなたへのポインタtreeを保持することを私に提案します。BinaryTree<T>

ここでは、値ではなくポインタ、つまりメモリアドレスを比較しています。

if(tree[0] < tree[1])
   printf("0 < 1\n");
else printf("1 > 0\n");

あなたはおそらく必要です

if(*(tree[0]) < *(tree[1]))
   printf("0 < 1\n");
else printf("1 > 0\n");
于 2012-05-01T09:03:09.057 に答える