尘世·雨泽 2022-03-30 22:29 采纳率: 100%
浏览 39
已结题

C++语言编译,在main()函数输出时语句报错

问题遇到的现象和发生背景

C++语言编译 复数类,测试输入输出

问题相关代码,请勿粘贴截图

#include
#include
#include<stdio.h>
using namespace std;
//在程序中想要直接使用 cin 和 cout ,必须作正确的文件包含。

class Complex //定义复数类
{
private:
float real, imag;
public:
Complex(); //构造无参函数
Complex(float r = 0, float i = 0); //带参构造函数
Complex(const Complex& cx); //拷贝构造函数
~Complex(); //析构函数
Complex add(Complex c); //类中的成员函数,表示一个复数具有的行为
Complex minus(Complex c); //类中的成员函数,表示一个复数具有的行为
Complex multiply(Complex c); //类中的成员函数,表示一个复数具有的行为
Complex dicision(Complex c); //类中的成员函数,表示一个复数具有的行为
void Display();//实现复数的输出
};

//类外实现公有成员函数
Complex::Complex()//无参函数
{
real = 0;
imag = 0;
cout << "The complex is constructed." << endl;
}

Complex::Complex(float real, float imag)//带参构造函数
{
this->real = real;
this->imag = imag;
}
Complex::Complex(const Complex& m)//拷贝构造函数
{
this->real = m.real;
this->imag = m.imag;
}
Complex::~Complex()//析构函数
{
}

Complex Complex::add(Complex c)//复数加法
{
real += c.real;
imag += c.imag;
return *this;
}

Complex Complex::minus(Complex c)//复数减法
{
real -= c.real;
imag -= c.imag;
return *this;
}

Complex Complex::multiply(Complex c)//复数乘法
{
real = realc.real-imagc.imag;
imag = realc.imag+imagc.real;
return *this;
}

Complex Complex::dicision(Complex c)//复数除法
{
float t = c.real * c.real + c.imag * c.imag;
real = (realc.real+imagc.imag)/t;
imag = (imagc.real-realc.imag)/t;
return *this;
}

void Complex::Display()//复数输出
{
if(imag > 0)
{
cout << real << "+" << imag << "i" << endl;
}
else if (imag < 0)
{
cout << real << imag << "i" << endl;
}
else {
cout << real << endl;
}
}
int main()
{
Complex c1 = Complex(3, 4);
Complex c2 = Complex(9, -4);
Complex c3 = Complex(4, 9);
Complex c4 = Complex(8, 4);
Complex c5 = Complex(21, 7);
cout << "输入的复数如下:\n";
c1.Display();
c2.Display();
c3.Display();
c4.Display();
c5.Display();
cout << "得到的运算结果如下:\n";
Complex t01 = c1.add(c2);
c2.Display();
c1.Display();
t01.Display();
Complex t02 = c2.minus(c3);
cout<< "t02 = " << t02<< endl;
t02.Display();
Complex t03 = c4.add(c2);
t03.Display();
Complex t04 = c5.minus(c3);
t04.Display();
Complex t05 = c1.add(c1);
t05.Display();
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

在用cout<<"t02="<<t02<<endl;作为输出语句时,“<<” 报错

我想要达到的结果

正常输出语句即可

  • 写回答

3条回答 默认 最新

  • 关注

    Complex类没有重载<<运算符,所以在使用cout<<t02的时候会报错。在Complex类中重载<<运算符就可以了,代码修改如下(修改部分有注释):

    #include <iostream>
    
    using namespace std;
    //在程序中想要直接使用 cin 和 cout ,必须作正确的文件包含。
    
    class Complex //定义复数类
    {
    private:
        float real, imag;
    public:
        Complex(); //构造无参函数
        Complex(float r = 0, float i = 0); //带参构造函数
        Complex(const Complex& cx); //拷贝构造函数
        ~Complex(); //析构函数
        Complex add(Complex c); //类中的成员函数,表示一个复数具有的行为
        Complex minus(Complex c); //类中的成员函数,表示一个复数具有的行为
        Complex multiply(Complex c); //类中的成员函数,表示一个复数具有的行为
        Complex dicision(Complex c); //类中的成员函数,表示一个复数具有的行为
        void Display();//实现复数的输出
    
        friend ostream& operator<<(ostream& os, const Complex& c); //修改,重载<<运算符
    };
    
    //类外实现公有成员函数
    Complex::Complex()//无参函数
    {
        real = 0;
        imag = 0;
        cout << "The complex is constructed." << endl;
    }
    
    Complex::Complex(float real, float imag)//带参构造函数
    {
        this->real = real;
        this->imag = imag;
    }
    Complex::Complex(const Complex& m)//拷贝构造函数
    {
        this->real = m.real;
        this->imag = m.imag;
    }
    Complex::~Complex()//析构函数
    {
    }
    
    Complex Complex::add(Complex c)//复数加法
    {
        real += c.real;
        imag += c.imag;
        return *this;
    }
    
    Complex Complex::minus(Complex c)//复数减法
    {
        real -= c.real;
        imag -= c.imag;
        return *this;
    }
    
    Complex Complex::multiply(Complex c)//复数乘法
    {
        real = real*c.real - imag*c.imag;
        imag = real*c.imag + imag*c.real;
        return *this;
    }
    
    Complex Complex::dicision(Complex c)//复数除法
    {
        float t = c.real * c.real + c.imag * c.imag;
        real = (real*c.real + imag*c.imag) / t;
        imag = (imag*c.real - real*c.imag) / t;
        return *this;
    }
    
    void Complex::Display()//复数输出
    {
        if (imag > 0)
        {
            cout << real << "+" << imag << "i" << endl;
        }
        else if (imag < 0)
        {
            cout << real << imag << "i" << endl;
        }
        else {
            cout << real << endl;
        }
    }
    //修改,重载<<运算符
    ostream& operator<<(ostream& os, const Complex& c)
    {
        os << c.real << "+" << c.imag << "i";
        return os;
    }
    
    
    int main()
    {
        Complex c1 = Complex(3, 4);
        Complex c2 = Complex(9, -4);
        Complex c3 = Complex(4, 9);
        Complex c4 = Complex(8, 4);
        Complex c5 = Complex(21, 7);
        cout << "输入的复数如下:\n";
        c1.Display();
        c2.Display();
        c3.Display();
        c4.Display();
        c5.Display();
        cout << "得到的运算结果如下:\n";
        Complex t01 = c1.add(c2);
        c2.Display();
        c1.Display();
        t01.Display();
        Complex t02 = c2.minus(c3);
        cout << "t02 = " << t02 << endl;
        t02.Display();
        Complex t03 = c4.add(c2);
        t03.Display();
        Complex t04 = c5.minus(c3);
        t04.Display();
        Complex t05 = c1.add(c1);
        t05.Display();
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?