【问题标题】:Segmentation Fault in c++ program for complex numbers复数的c ++程序中的分段错误
【发布时间】: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;
 }

【问题讨论】:

标签: c++ segmentation-fault fault


【解决方案1】:

只需从 &gt;&gt; 运算符中的 Complex&amp; 参数中删除 const,因为您正在更改值。

friend istream& operator >> (istream& inputStream, Complex& comp);

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 2018-11-18
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2011-10-19
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多