在 C++ 中的重载操作数“<<”大小写错误中使用重载操作数“+”
Using overloaded operand "+" inside overloaded operand "<<" case error in C++
首先,我尝试在网上寻找解决方案。在许多教程中,我找到了如何重载操作数,但在任何地方我都找不到在另一个重载操作数中使用的重载操作数。
我在使用“<<”和“+”时遇到问题
我为复数创建结构,用实部和虚部表示。
之后,我创建了重载操作数“+”,它添加了其中两个结构,以及运算符“<<”,它允许打印这个结构。
在 Visual Studio 上编译时一切正常,但是当我尝试在 linux 上编译时(命令 g++ -o -pedantic -Wall a.cpp):
#include <iostream>
#include <math.h>
using namespace std;
struct Complex {
double re;
double im;
};
Complex operator + (Complex Skl1, Complex Skl2)
{
Complex result;
result.re = Skl1.re + Skl2.re;
result.im = Skl1.im + Skl2.im;
return result;
}
ostream & operator << (ostream & stream, Complex & Skl1)
{
stream << "(" << Skl1.re << showpos << Skl1.im << noshowpos << "i" << ")";
return stream;
}
int main(){
Complex L1, L2;
L1.re = 1;
L1.im = 2;
L2.re = 3;
L2.im = 4;
cout << L1 + L2;
return 0;
}
我看到这个错误:
a.cpp:31:8: error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Complex')
cout << L1 + L2;
我做错了什么?
您的 << 运算符需要声明为:
ostream & operator << (ostream & stream, const Complex & Skl1)
首先,我尝试在网上寻找解决方案。在许多教程中,我找到了如何重载操作数,但在任何地方我都找不到在另一个重载操作数中使用的重载操作数。
我在使用“<<”和“+”时遇到问题
我为复数创建结构,用实部和虚部表示。 之后,我创建了重载操作数“+”,它添加了其中两个结构,以及运算符“<<”,它允许打印这个结构。
在 Visual Studio 上编译时一切正常,但是当我尝试在 linux 上编译时(命令 g++ -o -pedantic -Wall a.cpp):
#include <iostream>
#include <math.h>
using namespace std;
struct Complex {
double re;
double im;
};
Complex operator + (Complex Skl1, Complex Skl2)
{
Complex result;
result.re = Skl1.re + Skl2.re;
result.im = Skl1.im + Skl2.im;
return result;
}
ostream & operator << (ostream & stream, Complex & Skl1)
{
stream << "(" << Skl1.re << showpos << Skl1.im << noshowpos << "i" << ")";
return stream;
}
int main(){
Complex L1, L2;
L1.re = 1;
L1.im = 2;
L2.re = 3;
L2.im = 4;
cout << L1 + L2;
return 0;
}
我看到这个错误:
a.cpp:31:8: error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Complex')
cout << L1 + L2;
我做错了什么?
您的 << 运算符需要声明为:
ostream & operator << (ostream & stream, const Complex & Skl1)