在 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;
}
原版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;
}