gcc上的子类型引用参数编译错误 我在编译一个GCC版本4.63的C++程序时遇到了一个问题。我可以用微软编译器(V9.0)毫无问题地编译这个程序。 这个程序使用了我的一些库,这些库是我在microsoft编译器中经常使用的

gcc上的子类型引用参数编译错误 我在编译一个GCC版本4.63的C++程序时遇到了一个问题。我可以用微软编译器(V9.0)毫无问题地编译这个程序。 这个程序使用了我的一些库,这些库是我在microsoft编译器中经常使用的,c++,C++,问题是当我尝试将引用作为参数传递时,它是另一个的子类型:这里的伪示例: class ObjManager{..} class SubObjMng : public ObjManager{ public: inline SubObjMng() : ObjManager(0, ... ){} }; class Test{ public: Test(int i, ObjManager &obj_mng); } int main(){ SubObjMng myobjmng

问题是当我尝试将引用作为参数传递时,它是另一个的子类型:这里的伪示例:

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

}
错误的输出为(我的程序的实际输出):

有人能帮忙吗?
谢谢

cdk::PtrObjMng
应该继承自
cdk::ObjMng
,通过引用使多态性成为可能。否则,根据编译器的说法,这是不可能的


当然,这可能不是问题的根源,我希望我们能看到您的构造函数的实现。

嗨,Giuseppe,我不知道您是否提供了足够的代码。它看起来像是在ObjManager或subbjmng中的某个地方,您正在定义使用HashMap的东西。但是可能没有人能在看不到代码的情况下提供帮助:)如果您创建了一段我们可以输入到编译器中的实际代码,并将输入到编译器时收到的输出附加到编译器中,这将非常有用。好的!我会尽量夸大其词的!;)如果您的命名约定可信,那么看起来
HashMap()
需要指向
ObjManager
的指针,而不是引用。。。
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&