2016-12-07 3 views
0

Ich habe eine Basisklasse und eine abgeleitete Klasse. Wenn ich versuche, den abgeleiteten Klassenzeiger in den Basisklassenzeiger zu konvertieren, erhalte ich einen Kompilierungsfehler.Wie repariert man 'kann Objekt vom Typ Base * mit einem Lvalue vom Typ value_type (aka Derived *) nicht initialisieren?

class Base { 
    .. 
} 

class Derived: public Base { 

} 

class X { 
    public: 
     Base* getWriter(int shard) { 
      return writers[0][shard]; 
     } 
    private: 
     mutable vector<vector<Derived*>> writers_; 
} 

Und die Fehler, die ich bekommen ist

error: cannot initialize return object of type 'Base *'
with an lvalue of type 'value_type' (aka 'Derived *') on line "return writers[0][shard];"

+1

Sind diese 3 Klassen alle in einem Header oder verteilt in mehreren Headern? – 1201ProgramAlarm

+0

Folgendes funktioniert für mich: 'struct Base {}; Struktur abgeleitet: öffentliche Basis {}; std :: vektor > schreiber; Base * getWriter (int shard) { \t Rücksprungschreiber [0] [shard]; } ' –

+0

Alle Klassen sind in verschiedenen Headern verteilt. – user1159517

Antwort

3

Der Header, X nicht einschließlich der Header, der Derived Klasse definiert definiert, so dass der Compiler nicht die Beziehung zwischen Base und Derived nicht kennt.

1

Dieser Fehler tritt auf, wenn die Beziehung zwischen den Typen Basis und Abgeleitet werden nicht an den Compiler bekannt.

Dies ist der Fall, wenn Sie nur Vorwärtsdeklarationen von Base und/oder Derived, aber keine Klassendefinitionen haben. Wenn Sie den Header, der Abgeleitete definiert, bevor Sie diese Konvertierung versuchen, sollten Sie Ihr Problem beheben.

Verwandte Themen