Domanda

Ho due classi

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

Come posso ottenere in modo che AINSTANCE viene creata un'istanza con un (int i) invece di cercare di cercare un costruttore di default? Fondamentalmente, voglio controllare la chiamata di un costruttore di dall'interno il costruttore di b.

È stato utile?

Soluzione

È necessario chiamare un (int) in modo esplicito nella lista del costruttore di inizializzazione:

b() : aInstance(3) {} 

Dove 3 è il valore iniziale che si desidera utilizzare. Anche se potrebbe essere qualsiasi int. Vedere i commenti per le note importanti sul ordine e altri avvertimenti.

Altri suggerimenti

Utilizzare un elenco di inizializzazione:

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

Basta usare un costruttore che è definito in questo modo:

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

Credo che si dovrebbe utilizzare un puntatore a 'a' come:

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

In questo modo si avrà definito il comportamento. Naturalmente è necessario liberare * AINSTANCE nel distruttore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top