2013-11-17 4 views
0
#include <iostream> 
using namespace std; 

class Vehicle{ 
protected: 
    string type; 
    int wheels; 
    bool engine; // number of engines in vehicle 

public: 
    Vehicle(string t, int w,bool e): 
     type(t), wheels(w), engine(e){}; 
    void setType(string t) {type = t;} 
    void setWheels(int w) {wheels = w;} 
    void setEngine(int e) {engine = e;} // number of engines, 0 - False. 
    string getType(){return type;} 
    int getWheels() {return wheels;} 
    bool getEngine() {cout << "1 - Has Engine | 0 - No Engine"; return engine;} 


}; 

class Auto:public Vehicle { 
private: 
    string brand; 
    int year; 
public: 
    Auto(string t, int w, bool e, string b, int y): 
     Vehicle(t,w,e), brand(b),year(y) {}; 

    void setBrand(string b) {brand = b;} 
    void setYear(int y) {year = y;} 
    string getBrand() {return brand;} 
    int getYear() {return year;} 
}; 

int main() 
{ 
    // This first segment of the program demonstrates the relationship 
    // between the base class and derived class through the use of 
    // a constructor. 
Auto Spider360("Car",4,2,"Ferrari",2000); 
cout << "Car type: " << Spider360.getType() << endl; 
cout << "Number of wheels: " << Spider360.getWheels() << endl; 
cout << " Has Engine: " << Spider360.getEngine() << "\n"; 
cout << "Brand: " << Spider360.getBrand() << endl; 
cout << "Year: " << Spider360.getYear() << "\n\n"; 

// Now I use member functions directly to assign values to an object 

Auto SuperAmerica; 

return 0; 

} 

Я не могу объявить объект Auto SuperAmerica; Я получаю следующую ошибку: «Нет соответствующего вызова функции для Auto :: Auto()» и для SuperAmerica, я не хочу использовать конструктор для установки значений, я хочу использовать свои функции Set.Создание нового объекта - ошибка

+1

Тогда вам понадобится конструктор по умолчанию. – chris

+0

@chris Спасибо, Итак, мне нужен конструктор по умолчанию в классах Vehicle и Auto? –

+0

Да, если вы не планируете инициализировать последние значениями по умолчанию. – chris

ответ

0

Ошибка

"No matching function call for Auto::Auto()" 

означает, что вы не можете создать экземпляр класса в том, как вы хотели. Если вы хотите создать объект, а затем инициализировать его члены позже, используя сеттеры, используйте default constructor.

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