创建集时出错

时间:2012-11-14 08:46:55

标签: c++ set

我想知道为什么我无法创建一套。 我收到以下错误

这是我的代码。

Point.cpp我的Point类

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:错误:将'const Point'作为'double Point :: getScalarValue()'的'this'参数传递,丢弃限定符[-fpermissive]

这是因为我有两个比较语句吗?

5 个答案:

答案 0 :(得分:5)

没有std::set::insert重载将bool作为第二个参数。您可以这样插入:

s_p2.insert(tempp2);

您的operator<也可以通过const方法改进,并采用const参考参数:

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派生,则这很重要。

答案 1 :(得分:4)

  • 插入只需要1个参数(在您的情况下)
  • Point::operator<应该是一个const成员函数,并将const Point作为参数(可能是一个const引用)
  • 您无需指定less<Point>(在您的情况下)

答案 2 :(得分: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);

答案 3 :(得分:0)

insert()中没有set,其中包含一个元素和bool。只需s_p2.insert(tempp2);

答案 4 :(得分:0)

管理解决它。我还需要让get get getCcalarValue()const。 因为它只返回值。

它符合并运行且没有错误。