gcc上的子类型引用参数编译错误

时间:2012-10-24 15:05:24

标签: c++

使用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&
任何人都可以帮忙吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

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

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