2014-12-08 4 views
1

У меня есть этот класс:инициализации класса массива в списке инициализации C++

class Taxi { 
    Wheel myWheel[4]; 
public: 
    Taxi(); 
}; 

и колеса другой класс содержит:

class Wheel{ 
    int radius, 
     tickness; 
public: 
    Wheel(int,int); 
}; 

теперь, что я хочу сделать, это инициализировать «myWheel [4 ]»в списке инициализации конструктора такси, как это:

Taxi::Taxi() :Wheel[0](5,5), Wheel[1](3,3), Wheel[2](5,5), Wheel[3](3,3) { 
    cout << "Ctor of Taxi" << endl; 
} 

, но он не работает, и я действительно нужна помощь, спасибо :)

ответ

6

Ваш список инициализации должен выглядеть

Taxi::Taxi() : myWheel { Wheel(5,5), Wheel(3,3), Wheel(5,5), Wheel(3,3)} { 
    cout << "Ctor of Taxi" << endl; 
} 

См LIVE DEMO

Если вы не имеете компилятор совместимый с текущей C++ стандартный (с ++ 11), нет возможности сделать это в списке инициализаторов членов. Вы должны инициализировать элементы массива внутри тела конструктора:

Taxi::Taxi() { 
    cout << "Ctor of Taxi" << endl; 
    myWheel[0] = Wheel(5,5); 
    myWheel[1] = Wheel(3,3); 
    myWheel[2] = Wheel(5,5); 
    myWheel[3] = Wheel(3,3); 
} 

Также обратите внимание, вы должны сделать Wheelnice class тогда.

+0

он не работает:/ ошибка: -только «()» допускаются в качестве инициализатора для элемента массива «AutoTaxi :: _ taxiWheel» -expected декларации -expected ';' \t -'AutoTaxi :: AutoTaxi :: _ taxiWheel ': не может указывать явный инициализатор для массивов – Naama

+0

@Naama Ну, связанная демонстрация работает. Вы правильно скопировали код? Я должен был исправить некоторые другие ошибки, пока это не сработало. Также обратите внимание на порядок декларации для 'Wheel' и' Taxi'. Каковы ваши стандартные флаги стандарта языка компилятора? –

+2

@Naama, для этого требуется C++ 11 –

3

можно только инициализировать массивы, если у вас есть C++ 11, способный компилятору, а затем вы можете сделать

Taxi::Taxi() :myWheel{{5,5}, {3,3}, {5,5}, {3,3}} { ... } 

Если вы не C++ 11, способный компилятору, то вы должны инициализировать массив вручную:

Taxi::Taxi() 
{ 
    myWheel[0] = Wheel(5, 5); 
    myWheel[1] = Wheel(3, 3); 
    myWheel[2] = Wheel(5, 5); 
    myWheel[3] = Wheel(3, 3); 
} 
+1

не работает. ошибка: не могу указать явный инициализатор для массивов – Naama

+1

Я не думаю, что второй вариант - это законный C++. – juanchopanza

+0

Все правильно, это было неверно в pre-C++ 11. Обновлен мой ответ –

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