ошибка: `erfc` не является членом` std`

Я пытаюсь построить OpenNN библиотека в соответствии с инструкциями Вот. Но после

make opennn

Я получаю следующий вывод (не полный):

[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)));

вышеуказанный вывод заканчивается

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 или что-то, но я не знаю точно, как. Я пытался добавить эту строку

CXXFLAGS += -std=c++11

в Makefile Но это не работает.


Я не знаю о cmake а также make что-нибудь. Но дело в том, что эти ошибки были вызваны несовместимостью с более старыми c++xx,

0

Решение

Удалите std ::, попробуйте это:

Fx = 0.5 * erfc((mean - (*this)[i])/(standard_deviation*std::sqrt(2)));
0

Другие решения

Решение А — обновить CMake

Вам нужна как минимум версия 3.1 CMake, поэтому вам нужно обновить ее, если ваша версия ниже.

Я столкнулся с этой проблемой в Ubuntu 14.04, которая по умолчанию использует версию 2.8 (имя пакета «cmake«); удалить его и установить»cmake3«вместо этого (в Ubuntu 14.04»cmake3«содержит CMake 3.5).

Так что для Ubuntu 14.04 официальная документация содержит ошибку и «sudo apt-get install cmake«должен быть заменен на»sudo apt-get install cmake3«; но учтите, что это может не относиться к разным (более новым) системам.

Решение B — редактировать CMakeLists

Это работает с более старой версией CMake (как минимум 2.6).

Обновить «CMakeLists.txt«файл в корневом каталоге исходного репозитория OpenNN; добавить строку»set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")«под чертой»set (CMAKE_CXX_STANDARD 11)«(должна быть 5-я строка).

объяснение

OpenNN использует «set (CMAKE_CXX_STANDARD 11)«сказать CMake, что должен использоваться стандарт C ++ 11. это поддерживается начиная с CMake 3.1. Эта проблема не улавливается старым CMake, потому что первая строка CMakeLists в OpenNN — «cmake_minimum_required(VERSION 2.6)«который говорит, что« минимальная версия — 2,6 ». Это позволяет запускать CMake в OpenNN с версией CMake, которая не поддерживает все используемые функции (OpenNN), что вызывает эту проблему.

Второе решение (решение B) просто добавляет необходимое-std=c++11msgstr «флаг для компилятора вручную.

0

По вопросам рекламы [email protected]