Domanda

Ho le seguenti classi:

class A {
protected:
     A *inner;
public:
    ....
    virtual void doSomething() = 0;
    ....
}

class B: public A {
   ...
   void doSomething() {
       if(inner != NULL)
           inner->doSomething();
   }
   ...
}

Quando uso inner->doSomething() ottengo un segmentation fault. Cosa devo fare per chiamare inner->doSomething() nella classe B?

grazie in anticipo.

È stato utile?

Soluzione

Senza un'inizializzazione esplicita dell'elemento interno, è possibile per essere entrambi non NULL e scegliere invalide memoria. Ci può mostrare il codice che initalizes esplicitamente interiore?

Un costruttore appropriato per una sarebbe la seguente

protected:
A() : inner(NULL) {
  ...
}

Altri suggerimenti

anche se si assegna la A * essere lo stesso come il B inizializzato questo puntatore si otterrà un overflow dello stack ... Qual è il motivo è necessario l'interno? Non puoi semplicemente chiamare A :: DoSomething ()?

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