错误 C2661 'fmt::v7::print': 没有重载函数接受 3 个参数
Error C2661 'fmt::v7::print': no overloaded function takes 3 arguments
我正在尝试做 :
fmt::print(fg(fmt::color::red), "A critical error has occured. consult the logs and fix the issue! {0}", std::endl);
这会导致错误消息:Error C2661 'fmt::v7::print': no overloaded function takes 3 arguments
。
查看官方文档 here 显示 fmt::print
为:
template <typename S, typename... Args>
void fmt::print(const text_style &ts, const S &format_str, const Args&... args)
这表明参数的数量不应该是一个问题,事实上,它不是。如果我用 1
这样随机的东西替换 std::endl
,它编译和构建就很好了!这里有什么问题?
std::endl
是一个模板,但在这种情况下无法确定模板参数,您必须明确指定它们。例如
fmt::print(fg(fmt::color::red),
"A critical error has occured. consult the logs and fix the issue! {0}",
std::endl<char, std::char_traits<char>>);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
错误消息在技术上是不正确的,因为有一个 fmt::print
重载需要 3 个参数。但是,即使您能够传递 std::endl
,也没有意义,因为刷新将应用于中间缓冲区,而不是写入 stdout
时。您应该使用 \n
并改为调用 fflush
:
fmt::print(fg(fmt::color::red),
"A critical error has occured. consult the logs and fix the issue!\n");
fflush(stdout);
请注意,显式传递模板参数将不起作用 - 您只会收到不同的错误:https://godbolt.org/z/T3GYqdchb.
我正在尝试做 :
fmt::print(fg(fmt::color::red), "A critical error has occured. consult the logs and fix the issue! {0}", std::endl);
这会导致错误消息:Error C2661 'fmt::v7::print': no overloaded function takes 3 arguments
。
查看官方文档 here 显示 fmt::print
为:
template <typename S, typename... Args>
void fmt::print(const text_style &ts, const S &format_str, const Args&... args)
这表明参数的数量不应该是一个问题,事实上,它不是。如果我用 1
这样随机的东西替换 std::endl
,它编译和构建就很好了!这里有什么问题?
std::endl
是一个模板,但在这种情况下无法确定模板参数,您必须明确指定它们。例如
fmt::print(fg(fmt::color::red),
"A critical error has occured. consult the logs and fix the issue! {0}",
std::endl<char, std::char_traits<char>>);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
错误消息在技术上是不正确的,因为有一个 fmt::print
重载需要 3 个参数。但是,即使您能够传递 std::endl
,也没有意义,因为刷新将应用于中间缓冲区,而不是写入 stdout
时。您应该使用 \n
并改为调用 fflush
:
fmt::print(fg(fmt::color::red),
"A critical error has occured. consult the logs and fix the issue!\n");
fflush(stdout);
请注意,显式传递模板参数将不起作用 - 您只会收到不同的错误:https://godbolt.org/z/T3GYqdchb.