首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:` `erfc`‘不是’of‘的成员

错误:` `erfc`‘不是’of‘的成员
EN

Stack Overflow用户
提问于 2017-09-22 11:36:17
回答 2查看 1K关注 0票数 0

我正试图按照OpenNN的指令构建这里库。但之后

代码语言:javascript
复制
make opennn

我得到以下输出(未满):

代码语言:javascript
复制
[2%] Built target tinyxml2 
[4%] Building CXX object opennn/CMakeFiles/opennn.dir/variables.cpp.o
In file included from /home/wolfgang/Downloads/OpenNN/opennn/variables.h:32:0,
             from /home/wolfgang/Downloads/OpenNN/opennn/variables.cpp:16:
/home/wolfgang/Downloads/OpenNN/opennn/vector.h: In member function ‘bool OpenNN::Vector<T>::Lillieforts_normality_test() const’:
/home/wolfgang/Downloads/OpenNN/opennn/vector.h:1144:20: error: ‘erfc’ is not a member of ‘std’
     Fx = 0.5 * std::erfc((mean - (*this)[i])/(standard_deviation*std::sqrt(2)));

以上输出以

代码语言:javascript
复制
make[3]: *** [opennn/CMakeFiles/opennn.dir/variables.cpp.o] Error 1
make[2]: *** [opennn/CMakeFiles/opennn.dir/all] Error 2
make[1]: *** [opennn/CMakeFiles/opennn.dir/rule] Error 2
make: *** [opennn] Error 2

我想我应该使用-std=c++11或其他什么的,但我不知道具体如何使用。我试着增加这一行

代码语言:javascript
复制
CXXFLAGS += -std=c++11

但是它不起作用。

我对cmakemake一无所知。但是,这些错误是由于与旧的c++xx不兼容造成的。

EN

回答 2

Stack Overflow用户

发布于 2018-01-22 20:34:36

删除std::,尝试如下:

代码语言:javascript
复制
Fx = 0.5 * erfc((mean - (*this)[i])/(standard_deviation*std::sqrt(2)));
票数 0
EN

Stack Overflow用户

发布于 2018-02-14 10:00:45

解决方案A-更新CMake

您至少需要3.1版的CMake,所以如果您的版本较低,则需要对其进行更新。

我在Ubuntu14.04上遇到了这个问题,它默认使用版本2.8 (包名为"cmake");卸载它并安装"cmake3“(在Ubuntu14.04上,"cmake3”包含CMake 3.5)。

因此,对于Ubuntu14.04,正式文档包含错误,应该将"sudo apt-get install cmake“替换为"sudo apt-get install cmake3";但请注意,这可能不适用于不同(较新的)系统。

解决方案B-编辑CMakeLists

这适用于较早的CMake版本(至少2.6)。

更新CMakeLists.txt源代码存储库根目录中的"set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")“文件;在"set (CMAKE_CXX_STANDARD 11)”行下添加“set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")”行(应该是第5行)。

解释

OpenNN使用"set (CMAKE_CXX_STANDARD 11)“来告诉CMake应该使用C++11标准。然而,这是支持的,因为CMake 3.1.老版本的CMake没有注意到这个问题,因为OpenNN的CMakeLists的第一行是"cmake_minimum_required(VERSION 2.6)“,上面写着”最小版本为2.6“。这允许在CMake上运行CMake版本,CMake版本不支持所有已使用的特性(通过OpenNN),这导致了这个问题。

第二个解决方案(解决方案B)只是为编译器手动添加所需的"-std=c++11“标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46363851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档