2012-11-14 40 views
3

我想知道爲什麼我無法創建集合。 我收到以下錯誤創建集合時的錯誤

這是我的代碼。

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'作爲'this'參數傳遞給'double Point :: getScalarValue()'丟棄限定符[-fpermissive]

這是因爲我有兩個比較語句?

+0

真的應該代表什麼? http://en.cppreference.com/w/cpp/container/set/insert – chris

+0

試試這個:http://www.cplusplus.com/reference/stl/set/insert/ – Maroun

+0

@chris我想,我需要給出比較值 –

回答

0

管理解決它。我需要讓我的getScalarValue()const也。 ,因爲它只返回值。

它符合並運行沒有錯誤。

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_typePoint。你用Point, bool來稱呼它。這些都不匹配。你認爲true參數有什麼作用?

只是把它作爲

s_p2.insert(tempp2); 
5

沒有std::set::insert重載需要一個布爾值作爲第二paramater。您可以將這樣的:

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派生的類型,這很重要。

+0

在你的想法之後,我得到這個錯誤/ usr/include/C++/4.6/bits/stl_function.h:236:22:error:將'const Point2D'作爲'bool Point2D :: operator < Point2D)'丟棄限定符[-fpermissive] –

+1

@ user1571494,在答案(和另一個)中建議使它成爲'const'成員。 – chris

+0

@ user1571494您需要將比較運算符設爲const方法或非成員函數。比較改變它的論點是沒有意義的。 – juanchopanza

0

insert()set,它需要一個元素和bool。只要做s_p2.insert(tempp2);

4
  • 插入只需要1個參數(在你的情況)
  • Point::operator<應該是一個const成員函數,並採取一個const點作爲參數(可能是const引用)
  • 你並不需要指定less<Point>(你的情況)
+0

按照你的想法,我現在得到這個錯誤/usr/include/c++/4.6/bits/stl_function.h:236:22:錯誤:將'const Point2D'作爲'bool Point2D :: operator < (Point2D)'捨棄限定符[-fpermissive] –

+1

是'getScalarValue()'一個const成員函數? – Arthur

+0

看看編輯過的代碼和錯誤。是的,我不能通過兩個agruments –