0

でエグゼクティブオブジェクトを作成すると、「「エグゼクティブ」の暗黙的に削除されたデフォルトコンストラクターへの呼び出しというエラーが表示されますmain.cpp。解決方法がわかりません。

これはmain.cpp次のとおりです。

#include <iostream>
#include <fstream>
#include "Executive.h"
using namespace std;

int main(int argc, const char * argv[])
{

    Executive ex;
    ifstream num("Lab01Polynomial.txt");
    ifstream com("Lab01Directives");
    ex.readFiles(num ,com);
    num.close();
    com.close();
    return 0;
}

これはExecutive.h次のとおりです。

#ifndef lab1_eecs_Executive_h
#define lab1_eecs_Executive_h
#include <fstream>
#include "Polynomial.h"

class Executive{
private:

    static const int MAX_DEGREE = 20;
    static const int MAX_NUM_POLYNOMIALS = 10;
    double coeff[MAX_DEGREE];
    Polynomial p[MAX_NUM_POLYNOMIALS];

public:
    void readFiles(std::istream &inpNumber, std::istream &inpInstructions);


};


#endif

これはExecutive.cpp次のとおりです。

#include "Executive.h"
#include <fstream>
#include <iostream>
#include "Polynomial.h"
using namespace std;

void Executive::readFiles(std::istream &inpNumber, std::istream &inpInstructions){
    int num_polynomials = 0;
    double coef;
    int poly_size;
    double array[MAX_DEGREE];

    while(!inpNumber.eof() && num_polynomials <= MAX_NUM_POLYNOMIALS){
        inpNumber >> poly_size;
        for(int a = 0; a <= poly_size; a++){
            inpNumber >> coef;
            array[a] = coef;
        }
        Polynomial poly(poly_size, array);
        p[num_polynomials] = poly;
        num_polynomials++;
    }

    string command;
    int poly_index;

    while( !inpInstructions.eof()){
        inpInstructions >> command;
        inpInstructions >> poly_index;

        if(poly_index > num_polynomials){
            cout << "The polynomial doesn't exist" << endl;
        }else if (command == " add"){
            int poly2_index;
            inpInstructions >> poly2_index;
            p[poly_index].add(p[poly2_index]);
        }else if (command == "evaluate"){
            double plugin_value;
            inpInstructions >> plugin_value;
            p[poly_index].evaluate(plugin_value);
        }else if (command == "differentiate"){
            p[poly_index].differentiate();

        }else if(command == "print"){
            p[poly_index].print(std::cout);

        }else
            cout << "Please type a command"<< endl;
    }
}

これはPolynomial.h次のとおりです。

#ifndef lab1_eecs_Polynomial_h
#define lab1_eecs_Polynomial_h
#include <fstream>
using namespace std;

class Polynomial{
private:
    static const int MAX_DEGREE = 20;
    double array_polynomial[MAX_DEGREE];
    int degree;

public:
    Polynomial(int d, double a[]);
    double evaluate(double x) const;
    Polynomial add(Polynomial p2) const;
    void print(std::ostream &os) const;
    Polynomial differentiate() const;

};
#endif

これはPolynomial.cpp次のとおりです。

#include "Polynomial.h"
#include <iostream>
#include <math.h>
using namespace std;


Polynomial::Polynomial(int d, double array[]){
    degree = d;
    for(int a =0; a <= degree; a++){
        array_polynomial[a] = array[a];
    }
}

double Polynomial::evaluate(double x) const{
    double final_value = 0;

    for(int a = 0; a <= degree; a++){
        final_value += array_polynomial[a] * pow(x, a);
    }

    cout << "The polynomial ";
    for(int b = 0; b <= degree; b++){
        if(b == 0){
            cout << array_polynomial[b] << " + ";
        }
        if(b == 1){
            cout << array_polynomial[b] << "x";
        }

        cout << " + " << array_polynomial[b] << "x^" << b;
    }
    cout << " when the value " << x << " is plugged in is " << final_value << endl;;
}

Polynomial Polynomial::add(Polynomial p2) const{
    double sum_array[degree];
    for(int a = 0; a <= degree; a++){
        sum_array[a] = array_polynomial[a] + p2.array_polynomial[a];
    }
    for(int a = 0; a <= degree; a++){
        if ( a== 0){
            cout << sum_array[a] << " + ";
        }else if ( a == 1){
            cout << sum_array[a] << "x";
        }else{
            cout << " + " << sum_array[a] << "x^" << a;
        }
        cout << endl;
    }
}

void Polynomial::print(std::ostream &os) const{
    for(int a = 0; a <= degree; a++){
        if(a == 0){
            os << array_polynomial[a] << " + ";
        }
        else if ( a == 1){
            os << array_polynomial[a] << "x";
        }else{
            os << " + " << array_polynomial[a] << "x^" <<a;
        }
    }
}

Polynomial Polynomial::differentiate() const{
    for(int a = 0; a <= degree; a++){

    }
}

どんな助けも本当に役に立ちます。

4

1 に答える 1

1

あなたのPolynomial型では、いくつかのユーザー定義のコンストラクターを提供しています。つまり、コンパイラーは暗黙的に宣言されたデフォルトのコンストラクターを提供しません。これは、オブジェクトの生の配列を作成できないことを意味しますPolynomial。配列 if を操作Polynomialする必要がある場合は、デフォルトのコンストラクターを自分で提供する必要があります。

于 2013-09-13T01:38:15.533 に答える