我有一个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);
模板功能有什么问题?
答案 0 :(得分:2)
您的运算符采用非常量引用,但head
为常量。
您应该将其更改为
friend sost& operator<<(sost& o, const Color& c)