1

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

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

构造函数:

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

有什么建议吗?

4

2 回答 2

2

编辑baseObject复制构造。

由于您尚未为 定义默认构造函数baseObject,因此编译器无法在derivedObject没有明确说明baseObject要使用的构造函数的情况下构造 a 。

那么,在您的定义中derivedConstructor,您将需要准确地指定baseObject构造函数。由于我不知道你的baseObject样子,我在下面使用了一个占位符:

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

在您的特定情况下,如果您尝试derivedObjectbaseObject已经存在的 a 创建 a,则应定义baseObject的复制构造函数,并执行以下操作:

derivedObject(const baseObject &base, const std::string &extra1)
    : baseObject(base)
{
    baseparameter1 = base.baseparameter1;
    baseparameter2 = base.baseparameter2;
    extraparameter1 = extra1;
}
于 2013-02-01T18:23:40.950 回答
2

每个构造函数都从初始化所有基类和直接成员开始,然后再访问{. 不要在正文中使用赋值,而是使用成员初始化器列表:

derivedObject(const baseObject &base, const std::string &extra1)
    : baseObject(base),        // Calls the baseObject copy constructor
      extraParameter1(extra1)  // Initialize the direct member
{
}

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

于 2013-02-01T18:27:01.207 回答