运算符重载时出错 <<
Error when Overloading the operator <<
_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;
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 呼叫运营商<<临时
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 为x86而非x64编译时出错
- <<操作员在下面的行中工作
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了