编译g_elpot时出现‘isnan’未在此作用域中声明的错误
解决g_elpot编译时
isnan未定义的错误 问题原因
在C++11标准中,isnan函数属于std命名空间,而代码中直接调用了isnan(未指定命名空间),导致编译器无法定位该函数定义。
解决方案
方案1:修改代码(推荐)
找到dx.cpp文件的第41行,将:
if (isnan(grid_values[i]))
修改为:
if (std::isnan(grid_values[i]))
方案2:添加命名空间声明
在dx.cpp文件的头文件引用区域之后,添加一行命名空间声明:
using std::isnan;
方案3:通过编译选项兼容(不推荐)
修改Makefile中的CXXFLAGS,添加-D_GNU_SOURCE参数强制编译器将isnan暴露在全局命名空间:
CXXFLAGS = -O3 -Wno-unused -funroll-all-loops -std=c++11 -fopenmp -D_GNU_SOURCE
验证修改
完成上述任一修改后,重新执行make命令即可完成编译。
内容的提问来源于stack exchange,提问作者AKA
相关产品推荐
相关产品推荐

