没有匹配函数来调用‘std::exception::exception(<brace-enclosed initializer list>)

no matching function for call to ‘std::exception::exception(<brace-enclosed initializer list>)

我的项目建立在 Windows (vc++17) 上,我是 Linux 的新手,所以我不确定发生了什么。

我为我的项目创建了 CMakeLists 文件(有 C++17 要求),生成了 makefile,然后我使用 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::exception does not provide a constructor 接受一个 const char* 参数。

如果您正在使用的 Windows 标准库中存在一个,则它是该语言的 non-portable 扩展。

many derived classes 可以用作您的基础 class,它们支持此构造函数。