1

MyClass演算子 + を上書きした連結リストがあります。

MyNode
{
   int value;
   MyNode* link;
}
MyClass
{
   MyNode* first;
   MyNode* current;
   MyNode* last;
   int count;
}
MyClass MyClass::operator+(MyClass* operand)
{
   MyClass sum;
   for(int i = 0; i < count; i++)
   {
      MyNode* newNode
      newNode->value = value + operand->value;
      sum->insert(newNode);
   }
   return sum;   
}

これをメイン関数に実装しようとすると、次のようになります。

MyClass* a = new MyClass();
MyClass* b = new MyClass();
MyClass* c;

c = a + b;

コンパイラは、「2 つのポインターを追加できません」というエラーをスローします。

4

2 に答える 2

4

あなたは Java のバックグラウンドを持っていますか? newオブジェクトを作成する必要はありません:

これを試して:

MyClass MyClass::operator+(const MyClass& operand)
{
   MyClass result;

   // Perform addition ...

   return result;  
}

MyClass a;
MyClass b;
MyClass c;

c = a + b;
于 2012-10-22T01:20:38.673 に答える
0

2 つの問題。まず、オペレーターの署名が間違っています。operator+const 参照を引数として取り、const 値を返す必要があります。したがって:

const MyClass MyClass::operator+(const MyClass& operand)

次に、ポインターが指すオブジェクトではなく、ポインター自体を追加しようとしています。したがって、次のものが必要です。

*c = *a + *b;

そして、100% 正しくするには、演算子自体をconst関数として宣言する必要があります。

 const MyClass MyClass::operator+(const MyClass& operand) const
于 2012-10-23T22:44:33.007 に答える