2016-12-07 11 views
0

私は基本クラスと派生クラスを持っています。派生クラスポインタを基本クラスポインタに変換しようとすると、コンパイルエラーが発生します。修正する方法 'value_type型(別名Derived *)の左辺値を持つBase型の戻りオブジェクトを初期化できませんか?

class Base { 
    .. 
} 

class Derived: public Base { 

} 

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

そして、私が手にエラーが種類のベースと派生関係がコンパイラに知られていない場合に、このエラーが発生し

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

+1

これらの3つのクラスは、すべて1つのヘッダーにありますか、複数のヘッダーに広がっていますか? – 1201ProgramAlarm

+0

以下は私のために働く: 'struct Base {}; 構造体が派生した:public Base {}; std :: vector >ライター。 ベース* getWriter(intシャード){ \t return writers [0] [シャード]; } ' –

+0

すべてのクラスは異なるヘッダーに広がっています。 – user1159517

答えて

3

ヘッダは、クラスDerivedを定義するヘッダーを含むされていないので、コンパイラはBaseDerivedの関係を知りません。

1

です。

これは、基本定義および/または派生の宣言のみを持ち、クラス定義を持たない場合に当てはまります。この変換を試みる前にDerivedを定義するヘッダーを含めると、問題が解決されます。 Xを定義

関連する問題