最近在学习c++,发现在Visual Studio 2022练习C++中set容器时,自定义排序函数
结果会出现以下错误:
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.35.32215\include\xutility(1137,19): error C3848: 具有类型“const comparePerson”的表达式会丢失一些 const-volatile 限定符以调用“bool comparePerson::operator ()(const Person &,const Person &)”
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.35.32215\include\xutility(1137,19): message : 尝试匹配参数列表“(const _Kty, const _Keyty)”时
打开文档帮助之后,提示如下,并且提供了一个例子:
类型为 “type” 的表达式会丢失一些常量可变限定符,以便调用 “function”
具有指定 const volatile 类型的变量只能调用使用相同或更大的 const volatile 限定定义的成员函数。
// C3848.cpp
void glbFunc1()
{
}
typedef void (* pFunc1)();
struct S3
{
operator pFunc1() // const
{
return &glbFunc1;
}
};
int main()
{
const S3 s3;
s3(); // C3848, uncomment const qualifier
}
打开csdn搜索,参考[这篇文章]发现解决方法
解决方案:
在仿函数中加入const
编译通过,运行结果如下:
个人理解应该是Visual Studio的编译器对此做出了更新,要求必须使用const限定。