下面是這個簡單的代碼equal_range和2個重載有this指針沒有法律轉換
#include <map>
class MyMap : public std::multimap<int*, int*>
{
public:
void foo(const int* bar) const
{
equal_range(bar);
}
};
int main()
{
MyMap myMap;
int number;
myMap.foo(&number);
return 0;
}
它不編譯,並給出以下錯誤
error C2663: 'std::_Tree<_Traits>::equal_range' : 2 overloads have no legal conversion for 'this' pointer
我見過很多有關此錯誤的主題,看起來這是一個const
問題。它編譯好,如果我把foo(const int* bar)
變成foo(int* bar)
。
問題是,我沒有看到foo
內容應該如何改變我的MyMap對象。 std::multimap
提出的equal_range
一個const版本:
http://www.cplusplus.com/reference/map/multimap/equal_range/
什麼是我的問題嗎?
謝謝
你知道最標準的庫類沒有被設計爲被繼承嗎?例如,['std :: multimap'](http://en.cppreference.com/w/cpp/container/multimap)[析構函數](http://en.cppreference.com/w/cpp/container/multimap /〜multimap)不是'virtual',所以不會在銷燬MyMap對象時被調用。 –