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

时间:2013-07-26 18:41:57

标签: c++ linux oop

所以,我基本上设计了一个“Hello,World!” OOP与c ++。 我有两个类,鸡和狗继承公共动物。 在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();
};

此处代码:Source Code

1 个答案:

答案 0 :(得分:5)

您将animal.h定义为

#ifndef ANIMAL
class Animal
{

应该是

#ifndef ANIMAL
#define ANIMAL
class Animal
{

以便多次不包含animal.h

另外,为保持一致性,请将所有标头都设为include guard。所以狗和鸡需要它。


除非你真的需要它

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

应该只是

#include "../animal.h"

因为前一个构造要求define完全匹配,因为您的原因已经不匹配。 animal.h定义ANIMAL或者至少尝试过但您要包含的内容是您正在检查ANIMAL_H