运算符重载时出错 <<

Error when Overloading the operator <<

本文关键字:lt 出错 重载 运算符      更新时间:2023-10-16
_3DTocka operator<<(ostream& os, _3DTocka _3D){
    cout << "(" << _3D.x << "," << _3D.y << "," << _3D.z << ")" << endl;
}

以上是我的代码,它给出了一个错误:它必须只需要一个参数(1行(

_3DTocka是类的名称。。

三个问题:首先,您声明的函数是错误的,它应该返回作为第一个参数接收的ostream引用。然后它不使用ostream参数,而是硬编码为cout。第三,它不返回任何内容,这将导致未定义的行为

关于实际的编译错误,您很可能将函数定义为类中的成员函数。定义为类成员的输出运算符与定义为独立函数的输出运算符完全不同:当声明为成员函数时,它应该有一个参数,并且它是一个将输出到对象的值。如果它是一个独立的函数(或在类中定义为friend(,则它用于将作为第二个参数传递的对象"输出"到作为第一个自变量传递的对象。


关于错误:

friend ostream& operator<<(ostream& os, _3DTocka _3D) {
    return os << '(' << _3D.x << ',' << _3D.y << ',' << _3D.z << ')';
}

注意事项:*我已将字符串文字转换为字符文字。处理字符串比处理单个字符更麻烦*我现在使用提供的输出流,这意味着您可以将其用于任何类型的输出流(如文件(*我已经删除了endl,它不需要,应该由该函数的"调用者"提供。

现在你可以做了

_3DTocka o = ...;
cout << o << endl;