如何解决错误 C2661“fmt::v7::print”:没有重载函数需要 3 个参数
我正在尝试:
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
。
template <typename S,typename... Args>
void fmt::print(const text_style &ts,const S &format_str,const Args&... args)
显示参数的数量不应该是一个问题,事实上,它不是。如果我将 std::endl
替换为像 1
这样随机的东西,它会编译并构建得很好!这里有什么问题?
解决方法
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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。