6 Stimmen

C++ Aufruf einer virtuellen Methode in einer untergeordneten Klasse

Ich habe die folgenden Klassen:

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

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

Wenn ich die inner->doSomething() Ich erhalte einen Segmentierungsfehler. Was muss ich tun, um die inner->doSomething() in der B-Klasse?

vielen Dank im Voraus.

9voto

JaredPar Punkte 699699

Ohne eine explizite Initialisierung des inneren Elements ist es möglich, dass es sowohl nicht NULL ist als auch auf einen ungültigen Speicher verweist. Können Sie uns den Code zeigen, in dem inner explizit initialisiert wird?

Ein geeigneter Konstruktor für A wäre der folgende

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

4voto

Goz Punkte 59671

Wenn Sie jedoch A* denselben Wert zuweisen wie B, der mit diesem Zeiger initialisiert wurde, kommt es zu einem Stapelüberlauf ... Gibt es einen Grund, warum Sie das Innere brauchen? Können Sie nicht einfach A::DoSomething() aufrufen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X