我是C ++的新手。我试着在clang 3.4中使用" -std = c ++ 11 -stdlib = libc ++"编译一个非常简单的std :: map progeam。旗帜,我得到了我不理解的错误。
#include<map>
#include<string>
template<typename KeyType>
struct ReverseSort {
bool operator() (const KeyType& key1, const KeyType& key2) {
return (key1 > key2);
}
};
int main() {
using namespace std;
map<int, string> mapIntToString1;
map<int, string, ReverseSort<int> > mapIntToString4(mapIntToString1.cbegin(), mapIntToString1.cend());
return 0;
}
错误是:
map:457:17: error: no matching function for call to object of type 'const ReverseSort<int>'
我知道错误来自main()中的第3行,只是不明白为什么。 相同的程序在g ++ 4.8.2中很好用&#34; -std = c ++ 11&#34;旗帜,我相信它在VC2010中也很不错。
感谢。
答案 0 :(得分:7)
您的operator()
成员必须是const
:
bool operator() (const KeyType& key1, const KeyType& key2) const
{ // ^^^^^
return (key1 > key2);
}