我正在尝试从基类转换为派生类。 我有以下构造函数,但编译器抱怨:
no matching function for call to ‘baseObject::baseObject()’
构造
derivedObject(const baseObject &base, const std::string &extra1)
{
baseparameter1 = base.baseparameter1;
baseparameter2 = base.baseparameter2;
extraparameter1 = extra1;
}
有什么建议吗?
答案 0 :(得分:2)
修改:baseObject
复制构建。
由于您尚未为baseObject
定义默认构造函数,因此编译器无法构造derivedObject
而没有明确指定要使用baseObject
构造函数的构造函数。
在您对derivedConstructor
的定义中,您将需要准确指定baseObject
构造函数。由于我不知道你的baseObject
是什么样的,我在下面使用了一个占位符:
derivedObject(const baseObject &base, const std::string &extra1)
: baseObject(PARAM1, PARAM2)
{
baseparameter1 = base.baseparameter1;
baseparameter2 = base.baseparameter2;
extraparameter1 = extra1;
}
在您的特定情况下,如果您尝试从已存在的derivedObject
创建baseObject
,则应定义baseObject
的复制构造函数,并执行以下操作:
derivedObject(const baseObject &base, const std::string &extra1)
: baseObject(base)
{
baseparameter1 = base.baseparameter1;
baseparameter2 = base.baseparameter2;
extraparameter1 = extra1;
}
答案 1 :(得分:2)
在到达{
之前,每个构造函数都首先初始化所有基类和直接成员。不使用正文中的赋值,而是使用成员初始化列表:
derivedObject(const baseObject &base, const std::string &extra1)
: baseObject(base), // Calls the baseObject copy constructor
extraParameter1(extra1) // Initialize the direct member
{
}
这是更好的风格,也避免了遇到的问题。