从基类转换为派生类

时间:2013-02-01 18:19:13

标签: c++

我正在尝试从基类转换为派生类。 我有以下构造函数,但编译器抱怨:

no matching function for call to ‘baseObject::baseObject()’

构造

derivedObject(const baseObject &base, const std::string &extra1)
{
    baseparameter1 = base.baseparameter1;
    baseparameter2 = base.baseparameter2;
    extraparameter1 = extra1;
}

有什么建议吗?

2 个答案:

答案 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
{
}

这是更好的风格,也避免了遇到的问题。