2015-11-19 2 views
1

Я создаю класс, который создаст характеристики автомобиля, и у меня возникнут некоторые трудности при попытке отобразить 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() { 
    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, первый член)

ответ

1

Try добавить регистрационный номер вашего автомобиля и количества транспортных средств:

Autovehicle a1 ("REG12345", "бензин", 1980, 11, 50, 8, 100, 50,).

0

В школе atm и неспособно получить хороший взгляд на это, но посмотрите на свой конструктор, у вас есть char вместо char ptr для вашего второго аргумента. вы не можете неявно преобразовать char в const char *, вы можете char * -> const char *, поэтому измените свой второй аргумент на char *. Кроме того, измените void main() на int main(), основной должен быть int (ansi standard), и многие компиляторы могут не согласиться с вами с помощью void main().

+0

Я сделал их обоих обугливается * , но я все равно имею ту же ошибку –

+0

Обратите внимание, что в вашем конструкторе отсутствует аргумент. Это настройка для поиска 8 аргументов, вы только даете ей 7 (не хватает int курса). – Jeff

+0

Когда я пытаюсь поместить другой int в i, я снова получаю первую ошибку –

0

Я вижу несколько проблем.

Можете ли вы объяснить, почему car_registration_number и двигатель имеют разные типы?

Если вы можете ответить на этот вопрос самостоятельно, вы можете исправить одну из своих проблем.

Также вы должны отделить объявление класса от реализации и убедиться, что вы инициализируете все переменные. Включая статическую.

+0

Я сделал оба из них char *, но у меня все еще такая же ошибка –

0

Проблемы вызова конструктора

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

второй параметр голец, но вы передаете символ *, а также конструктор имеет 6 ИНТ параметров, но передается только пять в главном. И вы не можете печатать значения объекта по-своему. Создать функцию в вас классе

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; 
} 

и назвать его в основной(), как

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

Спасибо, что исправил ошибку, и она компилирует и показывает, что я хочу, но теперь я получаю сообщение об ошибке «Debug assertion»! после этого. –

+0

В какой строке вы получаете сообщение об ошибке «Отладка»! ? –

+0

Это говорит # 141, но это другой класс, который еще не находится в главной функции. –

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; 
+0

Я изменил все это, и он решает ошибку, но теперь после круглой скобки {после того, как он говорит, что ожидает «;» –

+0

@OctavianCatusanu - Я обновил ответ. Если у вас возникли проблемы с пониманием некоторых из этих ошибок, вы будете бороться с C++ по мере продвижения с ним. – Sean

Смежные вопросы