2017-02-15 8 views
0

Мне нужно создать программу, содержащую 3 набора и 3, а также конструктор. Однако, когда я создал конструктор по умолчанию, он дал мне ошибку, что говорится там должны быть «)» перед «» в строкеdefault constructor C++ format

#include <string> 

class Vehicle 
{ 
public: 
    Vehicle(std::string vehicleType, int numberOfDoors, int maxSpeed) 
     : type{vehicleType}, number{numberOfDoors}, speed{maxSpeed}{} 
    void setType(std::string vehicleType) { 
       type = vehicleType;} 
    void setNumber(int numberOfDoors){ 
        number = numberOfDoors;} 
    void setSpeed(int maxSpeed) { 
       speed = maxSpeed;} 

    Vehicle(string, int, int); 
    ~Vehicle(); 
    Vehicle(); 
    std::string getType() const {return type;} 
    int getNumber() const {return number;} 
    int getSpeed() const {return speed;} 

private: 
    std::string type; 
    int number; 
    int speed; 
}; 

Может кто-нибудь сказать мне, что случилось?

+0

'Vehicle (строка, Int, Int);' - он должен быть 'станд :: string'. 'string' здесь не имя типа. – yeputons

+0

Почему вы объявляете один и тот же конструктор дважды? 'Vehicle (std :: string vehicleType, int numberOfDoors, int maxSpeed)' и 'Vehicle (string, int, int)'. – iosdude

+0

@iosdude Если бы я оставил его в покое, это скажет мне неопознанную ссылку на автомобиль: транспортное средство, которое означает, что конструктор по умолчанию – xx123

ответ

0

Вам необходимо удалить Vehicle(string, int, int);, как он был определен. (проверьте свой первый конструктор)

+0

Если я удалю Автомобиль (строка, int, int); , тогда он говорит мне, что мне нужен конструктор по умолчанию. Это дает мне неопознанную ссылку на «Vehicle :: Vehicle» – xx123

+0

Вы можете удалить «Vehicle();' и '~ Vehicle();' или сделать так, как предлагалось @swapnil - 'Vehicle() = default;' и '~ Vehicle() = default; 'if on C++ 11. – grubs

1

Вы уже определили три конструктора аргументов в начале своего класса, в которых вы используете список инициализаторов членов, чтобы инициализировать переменные-члены вашего класса Vehicle. Следовательно, вам не нужно декларировать его снова ниже:

Vehicle(string, int, int); 

Если вы удалите эту строку, код будет скомпилирован. См here

При создании экземпляра вашего класса, вам нужно будет предоставить три аргумента, один string и два int s

Кроме того, если вы хотите иметь конструктор по умолчанию, вы можете добавить следующую строку в классе ,

Vehicle():type(), number(0), speed(0){} 

Тогда вы должны быть в состоянии создать экземпляр класса Vehicle без каких-либо аргументов и функций пользователя Setter для установки значений переменных-членов такого объекта.

Также либо удалить не определен деструктор или определить деструктор может быть, таким образом:

~Vehicle(){ type.clear();} 

См here

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