C++ 操作员过载<&书信电报;

C++ 操作员过载<&书信电报;,c++,operator-overloading,C++,Operator Overloading,代码: std::ostream&operatorTakeoperator您正在使用自由格式签名定义成员函数。成员函数有一个隐式此参数,因此在您的情况下,成员函数尝试重载运算符运算符必须是自由函数,因为它的第一个参数与类的类型不同。通常,当您重载二进制运算符Foo时,成员函数版本只接受一个参数,Foo(a,b)表示a.Foo(b) 既然a你说的是自由函数还是成员函数?那是你的声明代码吗?如果是这样的话,你能给学生们展示一下吗operator@ShamariCampbell:供将来参考:这将是一个

代码:


std::ostream&operatorTake
operator您正在使用自由格式签名定义成员函数。成员函数有一个隐式
参数,因此在您的情况下,成员函数尝试重载
运算符运算符必须是自由函数,因为它的第一个参数与类的类型不同。通常,当您重载二进制运算符
Foo
时,成员函数版本只接受一个参数,
Foo(a,b)
表示
a.Foo(b)


既然
a你说的是自由函数还是成员函数?那是你的声明代码吗?如果是这样的话,你能给学生们展示一下吗operator@ShamariCampbell:供将来参考:这将是一个非常重要的事实,应该包括在你的问题中@Kerrek SB是的,对不起,您能看到显示此错误的原因吗?最好有一个公共的
toString
功能,而不需要
friend
ship@Benoit:取决于类的外观。命名空间BMV{typedef STD::vector BmvMessage_v_t;类BmvMessage:public DboGenBmvMessage{private:COM::FldInt_元素;public:DCS_DEF_类(BmvMessage)void getMessages(const COM::FldString Msg);void copyElements();};}#如果这是什么,那么这门课看起来像是帖子above@ShamariCampbell当前位置我指的是贝诺特的评论。我的建议仍然有效。我相当确定隐式
这个
参数在这里不起作用。@Kerrek SB:它们不起作用,这是我的观点。我想我还不够清楚
std::ostream& operator<<(std::ostream& os, const BmvMessage& bm);
ostream& operator<< (ostream& out, char c );`
class Foo {
public:
  std::string toString() const;
  // ...
};

std::ostream & operator<<(std::ostream & o, const Foo & x) {
  return o << x.toString(); 
}