继承初学者C++问题

继承初学者C++问题,c++,inheritance,virtualization,C++,Inheritance,Virtualization,我似乎在继承方面有问题。每当我试图重写Character.cpp文件中的函数时,我都会收到一个错误声明:“类Character不存在默认构造函数”。我对C++很陌生,我不明白为什么会出现错误。我想做的是基本上覆盖默认角色类的攻击,以使子类(称为食人魔)更强大。我想知道我是否正确使用了“虚拟” 我的Character.h文件 我的character.cpp文件 当为类声明非默认构造函数时,编译器不再生成默认构造函数 因此,您必须提供自己的构造函数。当您在派生类上调用构造函数时,会发生以下情况: 首

我似乎在继承方面有问题。每当我试图重写Character.cpp文件中的函数时,我都会收到一个错误声明:“类Character不存在默认构造函数”。我对C++很陌生,我不明白为什么会出现错误。我想做的是基本上覆盖默认角色类的攻击,以使子类(称为食人魔)更强大。我想知道我是否正确使用了“虚拟”

我的Character.h文件

我的character.cpp文件


当为类声明非默认构造函数时,编译器不再生成默认构造函数


因此,您必须提供自己的构造函数。

当您在派生类上调用构造函数时,会发生以下情况:

首先构造基本对象 初始化列表中的任何变量都会被初始化 执行派生构造函数的主体 如果未指定其他构造函数,则默认构造函数将用于1。由于没有默认构造函数,因此出现编译器错误

要指定其他构造函数,请执行以下操作:

Ogre::Ogre(int health, int lAttack, int fAttack, int damage) : Character (health, lAttack, fAttack, damage)
{
    // body of constructor
}
然后将调用与这些参数匹配的构造函数实例。既然已经定义了,就不会出现错误


至于析构函数上的错误,首先,正如其他人所说,如果不在类中声明析构函数,就不能重写析构函数。因此,您可以将~Ogre添加到您的类定义中。然而,您目前在析构函数体中没有做任何事情,那么为什么要重新定义它呢?只需将其保留为默认析构函数。

当您自己为类定义构造函数时,您将覆盖默认实现。 因此,您需要提供默认构造函数作为

          class Character
           {
               public:
               Character(){}
               //----------your code-----//
            }

          Similarly for your destructor problem you first decalre destructor in class and then define it in .cpp file.

          class Ogre:public Character
           {
              public:
               ~Ogre();
           }

这是因为没有字符默认构造函数。您可能想了解一下。默认情况下使析构函数为虚拟的,甚至不用考虑。//构造函数Ogre::Ogreint health,int LATTAK,int fAttack,int DAMARY:Characterant health,int LATTAK,int fAttack,int DAMARY{}//像这样吗?{}@TheCoder95它应该像任何构造函数调用一样:Characterhealth、lAttack、fAttack、damage。没有类型。[OT]:顺便说一句,~Character应该是虚拟的。显然,他不需要默认构造函数,只需通过OGRET的初始化列表将参数传递给“Character”构造函数即可。该问题已得到解决。现在我似乎得到了:错误C2600:“Ogre::~Ogre”:无法定义编译器生成的特殊成员函数,必须在类中声明first@TheCoder95您认为编译器错误试图告诉您什么?也许大声读出来。@coder95学习编程的唯一方法就是编程。甚至更真实的当谈到C++。祝你好运。所以我需要把~Ogre;进入我的食人魔课堂?像这样//覆盖凶猛攻击类食人魔:公共角色{public:Ogreint-health,int-lAttack,int-fAttack,int-damage;~Ogre;int-getfireartack{return rand%10+20;};
Ogre::Ogre(int health, int lAttack, int fAttack, int damage) : Character (health, lAttack, fAttack, damage)
{
    // body of constructor
}
          class Character
           {
               public:
               Character(){}
               //----------your code-----//
            }

          Similarly for your destructor problem you first decalre destructor in class and then define it in .cpp file.

          class Ogre:public Character
           {
              public:
               ~Ogre();
           }