Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Явный конструктор со всеми аргументами по умолчанию не может быть вызван из другого конструктора того же класса

Автор вопроса: ShamdorОтветов: 1

Почему явный конструктор со всеми аргументами по умолчанию не может быть вызван из другого конструктора того же класса?

 #include <iostream>
 #include <string>


 class A {
 public:
   explicit A(int a = 1, int b = 2) :
     a_(a),
     b_(b) {}

   A(std::string s)
     : A() {
       std::cout << s;
   }

   int a_;
   int b_;
 };

 int main() {
   A a("!");
   std::cout << a.a_;
 }

g++ -v

gcc версии 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

g ++ -o out -std = c ++ 11 main.cpp

Ошибка: main.cpp: 12: 13: ошибка: нет соответствующей функции для вызова ‘A :: A ()’

  • Я использую g ++ версии 4.8.2 Shamdor 12.12.2014
  • Невозможно воспроизвести, то же самое с clang Borgleader 12.12.2014
  • Прекрасно работает в g ​​++ 4.9.1 Jay Miller 12.12.2014

c++constructorexplicit

Ответы

Ответ 1 · рейтинг 1 · Ivan Efremov

Похоже, в 4.9.0 исправлена ​​ошибка gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58255

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы