回 帖 发 新 帖 刷新版面

主题:[讨论]用面向对象设计编写程序一元二次方程

#include<iostream>
#include<math.h>
using namespace std;
class Complex
{
private:
    double real,imag;
public:
    Complex (double,double);
    void set (double,double);
    void printf();

};

void Complex::set (double r,double i)
{
    real=r;
    imag=i;
}

void Complex::printf()
{
    cout<<real<<"+"<<imag<<"i"<<endl;
    cout<<real<<"-"<<imag<<"i"<<endl;
}

class Equation
{
private:
    double a,b,c,delta;
    Complex root1,root2;
    
public:
  Equation(double a1,double b1,double c1)
    {
        a=a1;b=b1;c=c1;
    }
    
    bool isEquation()
    {
    return(a!=0);
        
    }
    
    void countDelta()
    {
        delta=b*b-4*a*c;
    }
    
    Complex getFirstRoot()
    {
        root1=(-b+sqrt(delta))/2*a;
    }
    
    Complex getSecondRoot()
    {
        root2=(-b-sqrt(delta))/2*a;
    }
    
    void resolve()
    { double r1,r2,i1,i2;
        if(delta<0)
        {
        r1=(-b)/2*a;
        i1=sqrt(-delta)/2*a;
        r2=r1;
        i2=i1;
        }
        else if(delta=0)
        
              {
        
            r1=(-b+sqrt(delta))/2*a;
            i1=0;
            r2=r1;
            i2=0;
        }    
             else   
             {
             r1=(-b+sqrt(delta))/2*a;
             i1=0;
             r2=(-b-sqrt(delta))/2*a;
             i2=0;
             }

        
        
    
    }
};
    
    void main()
    {
        double a,b,c;
        cout<<"输入方程系数:"<<endl;
        cin>>a>>b>>c;
        Equation equation=new Equation(a,b,c);
        if(equation.isEquation())
        { 
            equation.countDelta();
            equation.resolve();
            Complex r1=equation.getFirstRoot();
        Complex r2=equation.getSecondRoot();
            r1.printf();
            r2.printf();
        }
        else
        {
        cout<<"该方程不是二元一次方程"<<endl;
        }
    }

但是有错误:
error C2512: 'Complex' : no appropriate default constructor available

回复列表 (共1个回复)

沙发

error C2512: 'Complex' : no appropriate default constructor available
这个错误是说没有合适的默认构造函数,因为你在Complex类定义了一个带两个参数的构造函数Complex (double,double),这时,编译器就不会给你提供默认的不带参数的构造函数,你又在Equation类里定义了两个Complex root1,root2;root1,root2这两个对象声明时是没有参数的,故你需要在你的Complex类里重载一个默认构造函数Complex(){};
把这句代码加进去就可以了,函数体是空的,什么都不做,还有,下面的两个函数是错误的,
   Complex getFirstRoot()
    {
        root1=(-b+sqrt(delta))/2*a;
    }
    
    Complex getSecondRoot()
    {
        root2=(-b-sqrt(delta))/2*a;
    }
这句,root1=(-b+sqrt(delta))/2*a;你自己看,右边的计算结果是一个浮点数,左边是一个Complex类型的对象,不能把计算结果返回给root1,类型不比配,最后,你这个函数的返回类型为Complex,你却没有返回,等于说这个函数又错又没用,你在主函数里写
Complex r1=equation.getFirstRoot(), getFirstRoot()不会返回任何东西,故你的r1什么也没有,你自己去改改吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册