我想知道为什么我无法创建一套。 我收到以下错误
这是我的代码。
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]
这是因为我有两个比较语句吗?
答案 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)
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。 因为它只返回值。
它符合并运行且没有错误。