繁体   English   中英

为什么我要调用对hidden_​​deleted默认构造函数的调用?

[英]Why do I get call to implicitly_deleted default constructor?

我在main.cpp创建Executive对象时收到“错误调用'Executive'的默认构造函数的错误”。我不知道如何解决。

这是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++){

    }
}

任何帮助将非常有用。

在您的Polynomial类型中,您提供了一些用户定义的构造函数,这意味着编译器将不会提供隐式声明的默认构造函数。 反过来,这意味着您无法创建Polynomial对象的原始数组。 如果需要使用Polynomial数组,则需要自己提供一个默认构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM