0

gcc バージョン 4.6.3 で c++ プログラムをコンパイルする際に問題があります。このプログラムは、Microsoft コンパイラ (v 9.0) で問題なくコンパイルできます。このプログラムは、Microsoft コンパイラで常に使用していたライブラリの一部を使用しています。

問題は、別のサブタイプである参照を引数として渡そうとしたときです:ここに疑似例:

class ObjManager{..}

class SubObjMng : public ObjManager{
public:
    inline SubObjMng() : ObjManager(0, ... ){}
};

class Test{
public:
   Test(int i, ObjManager &obj_mng);
}


int main(){

SubObjMng myobjmng;

Test t(0, myobjmng);    //GCC ERROR HERE

}

エラーの出力は(私のプログラムの実際の出力)です:

globals.h:227:40: error: no matching function for call to cdk::HashMap::HashMap(unsigned int, cdk::PtrObjMng, cdk::cstrObjMng)
globals.h:227:40: note: candidates are:
contrib/cdklib/cdk_struct.h:485:12: note: cdk::HashMap::HashMap(uint32_t, cdk::ObjManager&, cdk::ObjManager&)
contrib/cdklib/cdk_struct.h:485:12: note:   no known conversion for argument 2 from cdk::PtrObjMng to cdk::ObjManager&

誰でも助けることができますか?ありがとう!

4

1 に答える 1

0

cdk::PtrObjMngから継承する必要がありcdk::ObjMng、参照を通じてポリモーフィズムを可能にします。それ以外の場合、コンパイラの言うことによると、これはうまくいきません。

もちろん、これが問題の原因ではない可能性があります。コンストラクターの実装を確認できれば幸いです。

于 2012-11-22T23:23:34.443 に答える