运营商LT;<在模板函数中:无效的操作数

时间:2015-09-19 05:29:14

标签: c++ templates operators

我有一个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);调用它,rsymColor的实例。我得到了

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);

模板功能有什么问题?

1 个答案:

答案 0 :(得分:2)

您的运算符采用非常量引用,但head为常量。

您应该将其更改为

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