C++从基类继承的多个类会导致问题

C++ multiple classes inheriting from a base class causing issues

本文关键字:问题 基类 继承 C++      更新时间:2023-10-16

所以,我基本上设计了一个"Hello, World!带有 c++ 的 OOP。我有2个班级,从公共动物继承的鸡和狗。在 int main 中,当我创建每个实例时,我会收到错误消息,声称我已经创建了类 Animal 的多个实例。

Animal.h

#ifndef ANIMAL
class Animal
{
  int x;
  int y;
  int z;
  public:
    void setPosition(int newX, int newY, int newZ);
    void setX(int newX);
    void setY(int newY);
    void setZ(int newZ);
    int getPosition();
    int getX();
    int getY();
    int getZ();
};
#endif

Chicken.h

#ifndef ANIMAL_H
#include "../animal.h"
#endif
class Chicken : public Animal
{
  int id;
  bool isClucking;
  bool isEnraged;
  public:
    void setID(int newID);
    void setClucking(bool yn);
    void setEnraged(bool yn);
    int getID();
    bool getClucking();
    bool getEnraged();
};

Dog.h

#include "../animal.h"
class Dog : public Animal
{
  int id;
  public:
    void setID(int newID);
    int getID();
};

此处的代码:源代码

你把 animal.h 定义为

#ifndef ANIMAL
class Animal
{

应该是

#ifndef ANIMAL
#define ANIMAL
class Animal
{

这样就不会多次包含animal.h

同样为了保持一致性,请让所有标头都有一个包含保护。所以狗和鸡需要它。


除非你真的需要它

#ifndef ANIMAL_H
#include "../animal.h"
#endif

应该只是

#include "../animal.h"

因为前一种构造要求define完全匹配,而在您的原因中已经不匹配。 animal.h定义了ANIMAL或至少尝试,但您包括的地方是您正在检查ANIMAL_H