尝试显示

时间:2015-11-19 13:19:50

标签: c++

我正在构建一个可以创建车辆特征的类,我在尝试在控制台上显示autovehicle a1时遇到了一些困难。我得到一个我无法解释的错误。请尽可能帮助

   #include <iostream>
using namespace std;

class Autovehicle {
private:
    //registry number
    char * car_registration_number;
    char engine;
    int engine_cc;
    int avg_consumption;
    int avg_speed;
    int avg_consumption_urban;
    int avg_speed_urban;
    int max_speed;
    static int number_of_autovehicles;
public:
    //getters
    char * get_car_registration_number() {
        return this->car_registration_number;
    }

    char get_engine()
    {
        return this->engine;
    }

    int get_engine_cc() {
        return this->engine_cc;
    }
    int get_avg_consumption() {
        return this->avg_consumption;
    }
    int get_avg_speed() {
        return this->avg_speed;
    }
    int get_avg_consumption_urban() {
        return this->avg_consumption_urban;
    }
    int get_avg_speed_urban() {
        return this->avg_speed_urban;
    }
    int get_max_speed() {
        return this->max_speed;
    }
    static int get_number_of_cars() {
        return number_of_autovehicles;
    }
    //setters
    void set_car_registration_number(char *car_reg_nr) {
        this->car_registration_number = car_reg_nr;
    }
    void set_engine(char eng) {
        this->engine = eng;
    }
    void set_engine_cc(int eng_cc) {
        this->engine_cc = eng_cc;
    }
    void set_avg_consumption(int avg_cons) {
        this->avg_consumption = avg_cons;
    }
    void set_avg_speed(int avg_spd) {
        if (this->avg_speed > avg_spd)
            cout << endl << "You should probably slow down";
        this->avg_speed = avg_spd;
    }
    void set_avg_consumption_urban(int avg_cons_urb) {
        this->avg_consumption_urban = avg_cons_urb;
    }
    void set_avg_speed_urban(int avg_spd_urb) {
        if (this->avg_speed_urban > avg_spd_urb)
            cout << endl << "You should probably slow down";
        this->avg_speed_urban = avg_spd_urb;
    }
    void set_max_speed(int max_spd) {
        this->max_speed = max_spd;
    }
    //default constructor
    Autovehicle(){
        number_of_autovehicles++;
        this->car_registration_number = new char[strlen("There are no autovehicles") + 1];
        strcpy(this->car_registration_number, "There are no autovehicles");
        this->engine = NULL;
        this->engine_cc = 0;
        this->avg_consumption = 0;
        this->avg_speed = 0;
        this->avg_consumption_urban = 0;
        this->avg_speed_urban = 0;
        this->max_speed = 0;

    }
    //constructor
    Autovehicle(char* car_reg_nr, char eng, int eng_cc, int avg_cons, int avg_spd, int avg_cons_urb, int avg_spd_urb, int max_spd){
        number_of_autovehicles++;
        this->car_registration_number = new char[strlen(car_reg_nr) + 1];
        strcpy(this->car_registration_number, car_reg_nr);
        this->engine = eng;
        this->engine_cc = eng_cc;
        this->avg_consumption = avg_cons;
        this->avg_speed = avg_spd;
        this->avg_consumption_urban = avg_cons_urb;
        this->avg_speed_urban = avg_spd_urb;
        this->max_speed = max_spd;
    }
    //destructor
    ~Autovehicle() {
        delete[]this->car_registration_number;
        number_of_autovehicles--;
    }

};

这是void main,问题开始的地方:

void main() {
    Autovehicle a1( "Engniasd", "gasoline", 1980, 11, 50, 8, 100) {
        cout<<"registration number: "<< this->car_registration_number;
        cout << "engine: " << this->engine;
        cout << "engine cc:" << this->engine_cc;
        cout << "consumption: " << this->avg_consumption;
        cout << "avg speed: " << this->avg_speed;
        cout << "urban consumption: " << this->avg_consumption_urban;
        cout << "urban speed " << this->avg_speed_urban;

    }
}

当我试图显示Autovehicle a1(Engniasd,第一个术语)时,我得到的问题是“没有构造函数的实例匹配参数列表”

5 个答案:

答案 0 :(得分:1)

尝试将注册号添加到您的汽车和车辆数量:

Autovehicle a1(&#34; REG12345&#34; ,&#34;汽油&#34;,1980,11,50,8,100,50, 3 )。

答案 1 :(得分:1)

您的构造函数将eng定义为char,但您传递的是"gasoline" const char*

此外,将车辆登记号码存储为char*。让您的生活更轻松,并使用std::string代替。这样,您和您的类用户就不必担心管理指针的生命周期。

并且,在main中,您已声明了一个名为a1的变量,但看起来您正试图使用​​this调用方法。您需要调用实例变量:

cout << "engine: " << a1.engine;

您还需要使用分号终止a1声明,并且不需要大括号,例如:

Autovehicle a1( "Engniasd", "gasoline", 1980, 11, 50, 8, 100); 
cout << "registration number: "<< a1.car_registration_number;

答案 2 :(得分:0)

在学校atm并且无法好好看看这个,但是看看你的构造函数,你有第二个参数的char而不是char ptr。你不能隐式地将char转换为const char *,你可以char * - &gt; const char *,所以将你的第二个参数改为char *。另外,将void main()更改为int main(),main应该是int(ansi标准),并且许多编译器可能不接受使用void main()。

答案 3 :(得分:0)

我看到了几个问题。

你能解释为什么car_registration_number和引擎有不同的类型吗?

如果您可以自己回答这个问题,可以解决一个问题。

此外,您应该将类​​声明与实现分开,并确保初始化所有变量。包括静态的。

答案 4 :(得分:0)

调用构造函数的问题

Autovehicle(char* , char , int, int, int, int, int, int)

第二个参数是char,但是你传递char *,构造函数也有6个int参数,但是你只传递了5个。并且您无法以自己的方式打印对象的值。在课堂上创建功能

void print()
{
    cout<<"registration number: "<< this->car_registration_number;
    cout << "engine: " << this->engine;
    cout << "engine cc:" << this->engine_cc;
    cout << "consumption: " << this->avg_consumption;
    cout << "avg speed: " << this->avg_speed;
    cout << "urban consumption: " << this->avg_consumption_urban;
    cout << "urban speed " << this->avg_speed_urban;
}

并在main()中将其称为

Autovehicle a1( "Engniasd", "gasoline", 1980, 11, 50, 8, 100, 0);
a1.print();