【发布时间】:2018-01-22 23:59:32
【问题描述】:
我正在用 C++ 编写一个程序来重载运算符以处理复数。当程序运行时,我得到输出:
注意:请输入a+bi格式的复数
分段错误
我已经查看我的代码一段时间了,但我终其一生都找不到我犯错误的地方。程序编译没有错误。请,如果你能帮助我找到我哪里出错了,请告诉我。这是我的代码:
#include <iostream>
#include <cmath>
using namespace std;
class Complex
{
public:
//constructors
Complex();
Complex(double r1);
Complex(double r1, double r2);
//mutators
void setReal(double newNum);
void setComp(double newNum);
//accessor functions
double getReal() const;
double getComp() const;
//Friend functions
//overloading bindary operators
friend const Complex operator + (const Complex& x, const Complex& y);
friend const Complex operator - (const Complex& x, const Complex& y);
friend const Complex operator * (const Complex& x, const Complex& y);
//overloaded boolean
friend bool operator == (const Complex& x, const Complex& y);
//overloading << for output and >> for input
friend ostream& operator << (ostream& outputStream, const Complex& comp);
friend istream& operator >> (istream& inputStream, const Complex& comp);
private:
//private member variables
double a; //a is the real part, while b is the complex part
double b;
};
int main()
{ char ans;
Complex comp1, comp2;
cout<<"Note: please enter complex numbers in a+bi format "<<endl;
cout << "Complex number 1: ";
cin >> comp1;
cout << "Complex number 2: ";
cin >> comp2;
cout << endl << "The sum is: " << comp1 + comp2;
return(0);
}
Complex::Complex()
{
a = 0;
b = 0;
}
Complex::Complex(double r1)
{
a = r1;
b = 0;
}
Complex::Complex(double r1, double r2)
{
a = r1;
b = r2;
}
void Complex::setReal(double newNum)
{
a = newNum;
}
void Complex::setComp(double newNum)
{
b = newNum;
}
double Complex::getReal() const
{
return a;
}
double Complex::getComp() const
{
return b;
}
const Complex operator + (const Complex& x, const Complex& y)
{
int real, comp;
real = x.a + y.a;
comp = x.b + y.b;
Complex compSum(real, comp);
return compSum;
}
const Complex operator - (const Complex& x, const Complex& y)
{
int real, comp;
real = x.a - y.a;
comp = x.b - y.b;
Complex compDiff(real, comp);
return compDiff;
}
const Complex operator * (const Complex& x, const Complex& y)
{
int real, comp;
real = (x.a * y.a) - (x.b * y.b);
comp = (x.a * y.b) + (x.b * y.a);
Complex compProd(real, comp);
return compProd;
}
bool operator == (const Complex& x, const Complex& y)
{
return ((x.a == y.a)&&(x.b == y.b));
}
ostream& operator << (ostream& outputStream, const Complex& comp)
{
outputStream << comp.a << "+"<<comp.b<<"i";
return outputStream;
}
istream& operator >> (istream& inputStream, const Complex& comp)
{
char plus, iLet;
inputStream >> comp.a >> plus >> comp.b >> iLet;
return inputStream;
}
【问题讨论】:
-
请edit您的问题提供minimal reproducible example。
-
不要“看”它——调试它。
-
friend istream& operator >> (istream& inputStream, const Complex& comp);看起来不对。如果comp是const你将如何更新它。另见:stackoverflow.com/questions/4421706/… -
@RichardCritten 已修复!非常感谢。
标签: c++ segmentation-fault fault