Это отношения, о которых я говорю:
struct A{
int i = 1;
};
struct B{
union{A a;};
};
void main(){
B b;
};
В этом созвездии мой компилятор (vs2015) жалуется на удаление конструктора по умолчанию B B::B(void)
с замечанием, что компилятор сгенерировал B::B
:
../test.cpp(155): error C2280: "B::B(void)" : Es wurde versucht, auf eine gelöschte Funktion zu verweisen
../test.cpp(152): note: Compiler hat hier "B::B" generiert
(извините, я не смог убедить MSVC говорить со мной по-английски)
Любое из этих двух изменений кода исправляет это:
struct A{
int i; //removed initialzation of member to 1
};
или
struct B{
B(){} //adding explicit default constructor
union{A a;};
};
Я знаю, что добавление конструктора по умолчанию, который ничего не делает, не совсем сложный или раздражающий обходной путь, но я действительно хочу знать, почему C ++ заставляет меня это делать.