0

ベクトルから「2」を削除するためにこの消去関数を実行しようとしたときに、エラーのリストが発生しました。どこに問題があるのか​​ わかりません。助けていただければ幸いです。

STRUCT MyInt

struct MyInt
{
friend ostream &operator<<(ostream &printout, const MyInt &Qn)
{
   printout<< Qn.value << endl;
   return printout;
}

  int value;
  MyInt (int value) : value (value) {}
};

STRUCT マイスタッフ

struct MyStuff
{
  std::vector<MyInt> values;

  MyStuff () : values ()
  { }
};

主要

int main()
{
MyStuff mystuff1,mystuff2;

for (int x = 0; x < 5; ++x)
    {
        mystuff2.values.push_back (MyInt (x));
    }

vector<MyInt>::iterator VITER;
mystuff2.values.push_back(10);
mystuff2.values.push_back(7);

    //error points to the line below
mystuff2.values.erase(std::remove(mystuff2.values.begin(), mystuff2.values.end(), 2), mystuff2.values.end());

    return 0;

}

エラー メッセージ

stl_algo.h: 関数内 '_OutputIterator std::remove_copy(_InputInputIterator, _InputIterator, const_Tp&) [with_InputIterator = __gnu_cxx:__normal_iterator > >, OutputIterator = __ gnu_cxx::__normal iterator > >, Tp = int]'

operator==' に一致しません

エラー メッセージは、特定の行が実質的に stl_algo.h の行に違反していることを示しました。

4

2 に答える 2

2

==class の演算子をオーバーロードする必要がありますMyInt

例えば:

struct MyInt
{

friend ostream &operator<<(ostream &printout, const MyInt &Qn)
{
   printout<< Qn.value << endl;
   return printout;
}

// Overload the operator 
bool operator==(const MyInt& rhs) const
{
  return this->value == rhs.value;
}

  int value;
  MyInt (int value) : value (value) {}
};
于 2012-05-13T18:05:43.857 に答える
1

2 つの問題があります。表示されているエラーは、int と型の間の等値比較を定義していないことを示しています。構造体では、1 つの等値演算子を定義する必要があります

bool operator==(int other) const
{
    return value == other;
}

もちろん、グローバル演算子を逆方向に定義します。

bool operator==(int value1, const MyInt& value2)
{
    return value2 == value1;
}
于 2012-05-13T18:09:15.413 に答える