この場合、なぜデフォルトのコンストラクターを宣言する必要があるのか疑問に思います。一つには、私がそれを省略した場合、コンパイラはそれを自動的に行いませんか?それにもかかわらず、なぜそれが必要なのかはまだわかりません。また、「obj_B = origin.obj_B;」を省略しても、エラーが発生します。
class B
{
public:
bool theArray[5] ;
B(bool x) {theArray[1] = x;};
//B(){};
};
class A
{
public:
B obj_B;
A() : obj_B(1) {};
A(A const &origin) {obj_B = origin.obj_B;}; //error:no matching function for call
//to B::B()
};
int main ()
{
std::vector <A> someAs;
for(int q=0;q<10;q++)
someAs.push_back(A());
for(int q=0;q<10;q++)
std::cout << someAs[q].obj_B.theArray[1] << std::endl;
}