¿Cómo se usa el constructor no predeterminado para un miembro?

Tengo dos clases

class a { public: a(int i); }; class b { public: b(); //Gives me an error here, because it tries to find constructor a::a() a aInstance; } 

¿Cómo puedo obtenerlo para que instale una instancia con un (int i) en lugar de intentar buscar un constructor predeterminado? Básicamente, quiero controlar la llamada de un constructor desde el constructor de b.

Necesita llamar a (int) explícitamente en la lista de inicializadores del constructor:

 b() : aInstance(3) {} 

Donde 3 es el valor inicial que le gustaría usar. Aunque podría ser cualquier int. Ver comentarios para notas importantes sobre orden y otras advertencias.

Use una lista de inicialización:

 b::b() : aInstance(1) {} 

Solo usa un constructor que se define así:

 class b { public: b() : aInstance(5) {} a aInstance; }; 

Creo que deberías usar un puntero a ‘a’ como:

 class b { public: b() : aInstance(new a(5)) {} a *aInstance; }; 

De esta forma, tendrás un comportamiento definido. Por supuesto, tendrá que liberar * una instancia en el destructor.