重载运算符时出错<<

时间:2014-04-29 10:40:51

标签: c++ class operator-overloading

_3DTocka operator<<(ostream& os, _3DTocka _3D){
    cout << "(" << _3D.x << "," << _3D.y << "," << _3D.z << ")" << endl;
}

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

_3DTocka是该类的名称..

1 个答案:

答案 0 :(得分:5)

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

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


关于错误:

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

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

现在你可以做到

_3DTocka o = ...;

cout << o << endl;