VS2022平台工具集v143编译FLANN库失败,v142正常如何修复?
解决FLANN在VS2022 v143(C++14+)编译时heap.h的C2143语法错误
问题原因
VS2022的v143平台工具集对C标准的支持更严格,std::binary_function这个模板在C11就被标记为弃用,C++17里直接被移除了。原代码继承了这个已移除的模板,因此编译时抛出C2143语法错误。
修复方案
直接修改heap.h里的报错代码段,替换掉对std::binary_function的继承,有两种可行方式:
方式一:保留原类型定义(适配依赖这些类型的代码)
把继承语句替换为手动定义std::binary_function原本提供的类型别名,确保原有依赖逻辑不受影响:
struct CompareT { using first_argument_type = T; using second_argument_type = T; using result_type = bool; bool operator()(const T& t_1, const T& t_2) const { return t_2 < t_1; } };
方式二:简化代码(如果后续逻辑不依赖旧类型)
如果FLANN的其他代码没有用到first_argument_type这类别名,直接去掉继承,只保留核心的调用运算符即可:
struct CompareT { bool operator()(const T& t_1, const T& t_2) const { return t_2 < t_1; } };
补充说明
如果编译时还有其他类似报错,检查代码中其他使用std::binary_function或std::unary_function的地方,用同样的方式处理即可。v142工具集默认兼容旧标准,所以没触发这个问题,v143严格遵循新标准,必须移除这些废弃的标准库类型。
内容的提问来源于stack exchange,提问作者Rafael Scudelari de Macedo
相关产品推荐
相关产品推荐

