编译如下代码。
std::vector<int64_t> xv;
std::sort(xv.cbegin(),xv.cend());
编译时遇到了一个no matching function for call to 'swap'
的错误,但自己并没有直接使用这个函数,详细信息如下。
In file included from D:\share\map_jni\app\src\main\cpp\map\MapBox.cpp:4:
In file included from D:\share\map_jni\app\src\main\cpp\include\map\MapBox.h:7:
In file included from C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\string:505:
In file included from C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\string_view:176:
In file included from C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\__string:57:
C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\algorithm:3833:17: error: no matching function for call to 'swap'
继续定位到algorithm中sort函数使用*swap*
这里。
这是啥错误,一脸疑惑。看样是没有找到swap
函数的声明,不可能呀。
后来发现是因为sort的参数用了cbegin,但sort会改变容器,没有带const的版本,所以找不到函数定义。找不到函数名时,很容易忽略const的影响。但这编译器的错误提示,也太不友好了。
将cbegin, cend改为begin,end,编译通过。