La variabile di classe verrà inizializzata dopo la classe base

La variabile di classe verrà inizializzata dopo la classe base


Spero di avere un problema semplice a cui non sono riuscito a trovare una risposta specifica per quanto riguarda l'inizializzazione delle "variabili". Ecco l'elenco degli inizializzatori in questione:
Triangle.cc


Triangle::Triangle(Vector _a, Vector _b, Vector s, Point o)
: a(_a), b(_b), Shape(o, new RectilinearAnimationStrategy(s, bBoxMaxX(), bBoxMinX(), bBoxMaxY(), bBoxMinY())){}

So che devi inizializzare le variabili nello stesso ordine in cui sono definite nella classe, ma che dire di questo caso quando stai inizializzando anche un oggetto? Ho bisogno di a e b inizializzato esplicitamente prima della chiamata a Shape per restituire i valori corretti a RectilinearAnimationStrategy . Tutto ciò che provo mi dà



Qualsiasi aiuto è molto apprezzato, grazie.


Non ottengo quell'errore con la configurazione corrente né con la prima risposta data, ma l'output non accetta a e b in considerazione (non inizializzato quando è stato chiamato il costruttore Shape)


Risposte:


Capisco che l'inizializzazione di Shape dipende dalla funzione bBoxMaxX() che dipende dall'inizializzazione del membro b. Poiché la classe base Shape viene inizializzata prima del membro b, il codice non funzionerà correttamente.


La soluzione è avere una funzione bBoxMaxX() che utilizzi le variabili di inizializzazione _b. O un inizializzatore per Shape che usa _b direttamente. Ad esempio:


Triangle::Triangle(Vector _a, Vector _b, Vector s, Point o) : Shape(o, new RectilinearAnimationStrategy(s, bBoxMaxX(_b), bBoxMinX(_b), bBoxMaxY(_b), bBoxMinY(_b))),  a(_a), b(_b) {}

Alcune risposte al codice


Triangle::Triangle(Vector _a, Vector _b, Vector s, Point o)
: a(_a), b(_b), Shape(o, new RectilinearAnimationStrategy(s, bBoxMaxX(), bBoxMinX(), bBoxMaxY(), bBoxMinY())){}
Triangle::Triangle(Vector _a, Vector _b, Vector s, Point o) : Shape(o, new RectilinearAnimationStrategy(s, bBoxMaxX(_b), bBoxMinX(_b), bBoxMaxY(_b), bBoxMinY(_b))),  a(_a), b(_b) {}