在 C++ 中使用父 class 构造函数初始化列表

Using parent class constructor initialiser-list in C++

原版POST

编译时,以下代码产生错误 C2436:“__ctor”:成员函数或嵌套 class 在构造函数初始值设定项列表

在Child.h

#include Parent.h
class  Child : public Parent  
{
    public:
        Child (List* pList) 
            : Parent::Parent(pList)
        {
        }
};

这里是父级 class:

在Parent.h

class __declspec(dllimport) Parent : public GrandParent  
{
    public:
       Parent (List* pList = NULL);
}

在Parent.cpp

Parent::Parent (List* pList)
: 
    m_a(1)
   ,m_b(1)
   ,GrandParent(pList)
{
}

让子 class 调用父 class 构造函数的方法不对吗?

PS 如果我将 Child 构造函数的声明和实现拆分为 .h 和 .cpp,也会发生同样的情况。我无法更改父 class 代码,因为它是预编译库的一部分。

听取您的建议,@Mape,@Mat,@Barry,@Praetorian

我意识到这个问题是由于在 Parent class 中存在另一个构造函数。感谢您的建议,我生成了在新 post

中重现错误(最小、完整且可验证)的代码

改编自您的示例,编译正常。 Parent::Parent 应该只是 Parent.

#define NULL 0

struct List;

class GrandParent
{
    public:
       GrandParent(List* pList = NULL) {}
};


class Parent : public GrandParent
{
    public:
       Parent(List* pList = NULL);
       int m_a;
       int m_b;
};

Parent::Parent(List* pList)
:
    m_a(1)
   ,m_b(1)
   ,GrandParent(pList)
{
}

class  Child : public Parent
{
    public:
        Child (List* pList)
            : Parent(pList)
        {
        }
};

int main(void)
{
    GrandParent grandparent(NULL);
    Parent parent(NULL);
    Child child(NULL);

    return 0;
}