1

所以,我基本上设计了一个“你好,世界!” 使用 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();
};

代码在这里:源代码

4

1 回答 1

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

于 2013-07-26T18:46:02.117 回答