Я могу сделать это:
#include <iostream>
int counter;
int main()
{
struct Boo
{
Boo(int num)
{
++counter;
if (rand() % num < 7) Boo(8);
}
};
Boo(8);
return 0;
}
Это скомпилируется нормально, мой счетчик результат 21. Однако, когда я пытаюсь создать объект Boo
передавая аргумент конструктора вместо целочисленного литерала, я получаю ошибку компиляции:
#include <iostream>
int counter;
int main()
{
struct Boo
{
Boo(int num)
{
++counter;
if (rand() % num < 7) Boo(num); // No default constructor
// exists for Boo
}
};
Boo(8);
return 0;
}
Как вызывается конструктор по умолчанию во втором примере, а не в первом? Это ошибка, которую я получаю на Visual Studio 2017.
В онлайн компиляторе C++ onlineGDB я получаю ошибки:
error: no matching function for call to ‘main()::Boo::Boo()
if (rand() % num < 7) Boo(num);
^
note: candidate expects 1 argument, 0 provided