Pergunta

Eu tenho duas aulas

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;
}

Como posso obtê -lo para que o Ainstance seja instanciado com um (int i) em vez de tentar procurar um construtor padrão? Basicamente, quero controlar o chamado do construtor de A do construtor de B.

Foi útil?

Solução

Você precisa ligar para uma (int) explicitamente na lista inicial do construtor:

b() : aInstance(3) {} 

Onde 3 é o valor inicial que você gostaria de usar. Embora possa ser qualquer int. Veja comentários para notas importantes sobre ordem e outras advertências.

Outras dicas

Use uma lista de inicialização:

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

Basta usar um construtor que é definido assim:

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

Eu acho que você deveria usar um ponteiro para 'um' como:

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

Dessa forma, você terá comportamento definido. Claro que você precisará libertar *Ainstance no destruidor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top