Обязательно ли иметь конструктор по умолчанию для использования унифицированной инициализации в C++
В приведенном ниже коде я получил сообщение об ошибке "нет конструктора по умолчанию" . Поэтому я не могу использовать единый инициализатор.
Когда я сделал конструктор по умолчанию, я получил ошибку в отношении фигурных скобок.
Просьба выделить проблему об этой программе и едином инициализаторе.
Я использую VS 2012 и C++
class Circle {
double radius;
public:
Circle(double r) { radius = r; }
double circum() {return 2*radius*3.14159265;}
Circle () {
cout<<"ALI \n ";
}
};
int main () {
Circle baz {30.0}; // uniform init.
Circle qux{};
cout << "foo's circumference: " << baz.circum() << '\n';
cout<<endl;
return 0;
}
2 ответа
Это не поддерживается в выпущенной версии Visual C++ 2012.
Предварительный просмотр (CTP) имеет частичную поддержку списков инициализаторов здесь: http://www.microsoft.com/en-us/download/details.aspx?id=35515. Но этот конкретный код не будет работать даже в этом предварительном просмотре, потому что STL не был обновлен для использования списков инициализатора. Это будет хорошо работать в Visual Studio 2013. Я надеюсь, что это может помочь.
- Visual Studio 2012 не поддерживает единый синтаксис инициализации.
- Visual Studio 2013 поддерживает этот код. Вы можете увидеть это здесь: Visual Studio 2013 Build