我在A类中定义了一个<<像这样的运营商: 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;
有人可以告诉我为什么以及如何避免这种编译错误?
答案 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)
您的功能定义和实现不匹配。
std::ostream& operator<<(std::ostream o, const A&a);
stream& DTL::operator<<(ostream& o, const A& a);
您的A.h文件需要更改为:std::ostream& operator<<(std::ostream& o, const A&a);