3

セットが作成できない理由を知りたいのですが。次のエラーが発生します

これが私のコードです。

Point.cppマイポイントクラス

bool Point::operator<(const Point& p2)const {
return p21.length < p2.getScalarValue();
}

bool Point::operator>(const Point p2) {
bool result;
result = length > p2.getScalarValue();
return result;

}

そして私のmain.cppで

set<Point> s_p2;
Point tempp2;
s_p2.insert(tempp2);

入力をフォローした後、コードを編集しましたが、次のエラーが発生します

Point.cpp:56:46:エラー:「constPoint」を「this」引数として「doublePoint :: getScalarValue()」に渡すと、修飾子が破棄されます[-fpermissive]

これは、2つの比較ステートメントを取得したためですか?

4

5 に答える 5

5

2番目のパラメーターとしてブール値をとるstd::set::insertオーバーロードはありません。次のように挿入できます。

s_p2.insert(tempp2);

参照パラメータを使用してメソッドにすることで、あなたoperator<も改善される可能性があります。constconst

class Point {
  // as before
  bool operator<(const Point& p) const;
};  //                            ^ here, const method

bool Point::operator<(const Point& p2) const {
  return length < p2.length;
}

非メンバー関数にすることもできます。

bool operator<(const Point& lhs, const Point& rhs) {
  return lhs.getScalarValue() < rhs.getScalarValue();
}

これには、LHSおよびRHSに対して完全に対称であるという利点があります。Pointこれは、への暗黙の変換またはから派生した型がある場合に重要ですPoint

于 2012-11-14T08:50:34.330 に答える
4
  • 挿入は1つのパラメーターのみを取ります(あなたの場合)
  • Point::operator<constメンバー関数であり、パラメーターとしてconstポイントを取る必要があります(おそらくconst参照)
  • less<Point>(あなたの場合)指定する必要はありません
于 2012-11-14T08:51:29.867 に答える
3

の署名insertは次のいずれかです。

std::pair<iterator,bool> insert( const value_type& value );
(1) 
std::pair<iterator, bool> insert( value_type&& value );
(2) (since C++11)
iterator insert( iterator hint, const value_type& value );
iterator insert( const_iterator hint, const value_type& value );
(3) (until C++11) 
(since C++11)
iterator insert( const_iterator hint, value_type&& value );
(4) (since C++11)
template< class InputIt >
void insert( InputIt first, InputIt last );
(5) 
void insert( std::initializer_list<value_type> ilist );
(6) (since C++11)

value_typeとしてお読みくださいPoint。あなたはそれをで呼んでいPoint, boolます。これらのどれも一致しません。パラメータは何をしていると思いtrueますか?

ただそれを

s_p2.insert(tempp2);
于 2012-11-14T08:50:01.623 に答える
0

要素とをとるものinsert()はありません。ただやってください。setbools_p2.insert(tempp2);

于 2012-11-14T08:51:05.243 に答える
0

それを解決することができました。get getScalarValue()もconstにする必要があります。値を返すだけなので。

準拠し、エラーなしで実行されます。

于 2012-11-14T09:47:45.363 に答える