提问人:prakash 提问时间:11/6/2023 更新时间:11/7/2023 访问量:74
在 Linux 中使用 g++ 编译器编译 fmtlib include 文件时,得到类错误是私有的,无法从外部访问
When compiling fmtlib include file in Linux with g++ compiler getting an error of class is private and cannot be accessed from outside
问:
我正在使用 #include < fmt/ranges.h> 在我的 C++ 应用程序中格式化 std::array
#include <fmt/ranges.h>
#include <array>
int main()
{
std::array<short unsigned int, 3> arr = {1, 2, 3};
fmt::print("{}", arr);
}
它在 Windows 和 macos 中正确编译,但在使用 g++ 编译器的 linux 中失败,并出现以下错误:
../externals/fmtlib/fmt/ranges.h:49:29:错误:类“fmt::v10::d etail::is_std_string_like”中的所有成员函数都是私有的 [-Werror=ctor-dtor-privacy] 模板类 is_std_string_like {
../externals/fmtlib/fmt/ranges.h:65:29:错误:类“fmt::v10::d etail::is_map”中的所有成员函数都是私有的 [-Werror=ctor-dtor-privacy]
模板类 is_map {
../externals/fmtlib/fmt/ranges.h:49:29:错误:类“fmt::v10::d etail::is_std_string_like”中的所有成员函数都是私有的 [-Werror=ctor-dtor-privacy] 模板类 is_std_string_like {
../externals/fmtlib/fmt/ranges.h:65:29:错误:类“fmt::v10::d etail::is_map”中的所有成员函数都是私有的 [-Werror=ctor-dtor-privacy]
模板类 is_map {
截至撰写本文时,MSVC 和 Clang 是仅有的 2 个支持标头的编译器。g++ 不支持吗
似乎 MSVC 和 Clang 是唯一支持此标头的 2 个编译器 <fmt/ranges.h>。而 g++ 不支持此标头。
请帮帮我。
答:
问题是您选择拒绝有效的 C++ 代码,解决方案是从您的构建标志中删除此标志,至少在编译时是这样。-Werror=ctor-dtor-privacy
fmt/ranges.h
评论