C++ 派生类未调用整个基构造函数

C++ 派生类未调用整个基构造函数,c++,class,constructor,derived-class,C++,Class,Constructor,Derived Class,我确信这只是我正在犯的一些愚蠢的语法错误,但是当我的类CNeck从gramb派生时,调用它的默认构造函数,CNeck()一切正常。当它调用另一个构造函数CNeck(*parent)时,它似乎调用了指定基构造函数的一半,然后使用编译器默认构造函数或其他奇怪的东西 main.cpp int _tmain(int argc, _TCHAR* argv[]) { CNeck neck01; CLimb *ptr; ptr = &neck01; CNeck neck

我确信这只是我正在犯的一些愚蠢的语法错误,但是当我的类
CNeck
gramb
派生时,调用它的默认构造函数,
CNeck()
一切正常。当它调用另一个构造函数
CNeck(*parent)
时,它似乎调用了指定基构造函数的一半,然后使用编译器默认构造函数或其他奇怪的东西

main.cpp

int _tmain(int argc, _TCHAR* argv[])
{
    CNeck neck01;
    CLimb *ptr;
    ptr = &neck01;
    CNeck neck02(ptr);
    return 0;
}
limb.h(父类)

limb.cpp(父类)

h级(儿童班)

neck.cpp(儿童级)

正如您所看到的,子类除了调用父类的构造函数之外什么都不做,但是当我逐步执行程序时,我得到了以下结果:
CNeck-neck01:正常
CNeck-neck02(ptr):值cut、bone、resistance和isburn都有正确的值,但是isbleing、isnfire和isneedfirst急救都等于1而不是零。CNeck::CNeck(*parent)的主体仍在执行。
当我在测试和调用
攀爬肢体(ptr)时而不是
CNeck neck02(ptr)所有值都分配了正确的值

CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
应该是

CNeck::CNeck(CLimb *_parent) : CLimb(_parent)
此外,我真的不明白这是如何编译的:

ptr = &hand;
hand
根本没有声明,但在这里复制粘贴代码时,您似乎错过了它

应该是

CNeck::CNeck(CLimb *_parent) : CLimb(_parent)
此外,我真的不明白这是如何编译的:

ptr = &hand;

hand
完全没有声明,但看起来您在复制粘贴代码时错过了它。

您的构造函数被标记为
gramb(gramb*\u parent)表示它将指针指向爬升,但在
CNeck
构造函数中

CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
您正在取消对指针的引用,该指针调用复制构造函数
gramb(gramb&)
。将
*\u parent
转换为
\u parent
以解决此问题。另外,您可能还需要定义一个复制构造函数

在其他新闻中,不要这样做:

CLimb *ptr;
ptr = &hand;
这样做:

CLimb *ptr = &hand;
避免浪费周期

对于不带参数的函数,您也不需要在参数列表中使用
void
(这是C的做法,而不是C++)。例如:

CLimb(void);
CLimb(CLimb *_parent);
~CLimb(void);
应该是

CLimb();
CLimb(CLimb *_parent);
~CLimb();

我知道这与您的问题无关,但它的风格很好。

您的构造函数标记为
gramb(gramb*\u parent)表示它将指针指向爬升,但在
CNeck
构造函数中

CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
您正在取消对指针的引用,该指针调用复制构造函数
gramb(gramb&)
。将
*\u parent
转换为
\u parent
以解决此问题。另外,您可能还需要定义一个复制构造函数

在其他新闻中,不要这样做:

CLimb *ptr;
ptr = &hand;
这样做:

CLimb *ptr = &hand;
避免浪费周期

对于不带参数的函数,您也不需要在参数列表中使用
void
(这是C的做法,而不是C++)。例如:

CLimb(void);
CLimb(CLimb *_parent);
~CLimb(void);
应该是

CLimb();
CLimb(CLimb *_parent);
~CLimb();

我知道这与您的问题无关,但它的风格很好。

对不起,我已修复复制粘贴错误。对不起,我已修复复制粘贴错误。