gpt4 book ai didi

c++ - 模板函数 : invalid operands 中的运算符<<

转载 作者:行者123 更新时间:2023-11-30 03:49:16 26 4
gpt4 key购买 nike

我有一个类Color , 那有 friend std::ostream& operator<<(std::ostream&, Color&) .它看起来像这样:

struct Color
{
Color(CID c, sstr s)
:color(c),
str(s)
{
}


friend sost& operator<<(sost& o, Color& c)
{
o << "\033[1;" << c.color << "m" << c.str << "\033[0m";
return o;
}

CID color;
sstr str;
};

我可以在任何情况下毫无问题地调用运算符,但在模板函数中:

template<typename T>
void print_head(const T& head, sost& o)
{
o << head << "\r";
o.flush();
spaces+=(headSize);
}

我用 print_head<helper::Color>(rsym, o); 调用它与 rsym作为 Color 的实例.我得到了

error: invalid operands to binary expression ('sost'
(aka 'basic_ostream<char>') and 'const helper::Color')
o << head << "\r";
~ ^ ~~~~
note: in instantiation of function template specialization
'blk::Bouncer::print_head<helper::Color>' requested here
print_head<helper::Color>(rsym, o);

模板函数有什么问题?

最佳答案

您的运算符采用非 const 引用,但 head 是 const。

你应该把它改成

friend sost& operator<<(sost& o, const Color& c)

关于c++ - 模板函数 : invalid operands 中的运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32664614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com