无法绑定&#39; std :: basic_ostream&#39; lvalue to&#39; std :: basic_ostream <char>&amp;&amp;&#39;

时间:2016-01-25 15:27:23

标签: c++ gcc stream operator-keyword

我在A类中定义了一个&lt;&lt;像这样的运营商: A.h:

class API_name A {
    friend API_name std::ostream& operator<<(std::ostream& o, const A&a);
}

A.cpp:

ostream& operator<<(ostream& o, const A& a);

在包括A.h的另一个文件中,我想这样做:

void fonction(const A* a) {
    std::cout << "a contains : " << *a << std::endl;
}

在这一行,我gcc返回以下错误:

错误:无法绑定&#39; std :: basic_ostream&#39;左值到&#39; std :: basic_ostream&amp;&amp;&#39;

有人可以告诉我为什么以及如何避免这种编译错误?

2 个答案:

答案 0 :(得分:1)

friend定义错误地省略了&

即,

class API_name A {
    friend API_name std::ostream& operator<<(std::ostream o, const A&a);
}

应该是

class API_name A {
    friend API_name std::ostream& operator<<(std::ostream& o, const A&a);
}

答案 1 :(得分:0)

您的功能定义和实现不匹配。

  • A.h:std::ostream& operator<<(std::ostream o, const A&a);
  • A.cpp:stream& DTL::operator<<(ostream& o, const A& a);

您的A.h文件需要更改为:std::ostream& operator<<(std::ostream& o, const A&a);