Обязательно ли иметь конструктор по умолчанию для использования унифицированной инициализации в C++

  1. В приведенном ниже коде я получил сообщение об ошибке "нет конструктора по умолчанию" . Поэтому я не могу использовать единый инициализатор.

  2. Когда я сделал конструктор по умолчанию, я получил ошибку в отношении фигурных скобок.

Просьба выделить проблему об этой программе и едином инициализаторе.

Я использую 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
Другие вопросы по тегам