Мой проект построен на Windows (vc++ 17), и я новичок в сборках Linux, поэтому я не уверен, что происходит.
Я создал файлы CMakeLists для своего проекта (с требованием C++17), сгенерировал make-файл, а затем использовал make
, чтобы попытаться собрать его в Linux. Ошибка:
/home/julien/source/zipfs/zipfs/include/zipfs/zipfs_assert.h:30:70: error: no matching function for call to ‘std::exception::exception(<brace-enclosed initializer list>)’
30 | zipfs_usage_error_t(const char* message) : std::exception{ message } {}
| ^
In file included from /usr/include/c++/9/exception:38,
from /usr/include/c++/9/new:40,
from /usr/include/c++/9/ext/new_allocator.h:33,
from /usr/include/x86_64-linux-gnu/c++/9/bits/c++allocator.h:33,
from /usr/include/c++/9/bits/allocator.h:46,
from /usr/include/c++/9/string:41,
from /home/julien/source/zipfs/zipfs/include/zipfs/zipfs_path_t.h:3,
from /home/julien/source/zipfs/zipfs/include/zipfs/zipfs_error_t.h:3,
from /home/julien/source/zipfs/zipfs/source/zipfs_error_t.cpp:1:
Инкриминируемый код:
zipfs_usage_error_t(const char* message) : std::exception{ message } {}
Я не вижу, что в этом плохого; это несоответствие версии С++?
Спасибо. Как тогда мне создать исключение из c-строки?
Возможно, вы захотите наследовать от std::logic_error
или std::runtime_error
, каждый из которых предоставляет конструктор, принимающий const char*
Благодаря вам 2, я приму это как ответ.
std::exception
не предоставляет конструктор, который принимает параметр const char*
.
Если он существует в стандартной библиотеке Windows, которую вы используете, это непереносимое расширение языка.
Вместо этого в качестве базового класса можно использовать много производных классов, которые поддерживают этот конструктор.
std::exception
не предоставляет конструктор, который принимает параметрconst char*
. Если он существует в стандартной библиотеке Windows, которую вы используете, это непереносимое расширение языка. Вместо этого можно использовать много производных классов, которые поддерживают этот конструктор.