【问题标题】:C++ multiple classes inheriting from a base class causing issues从基类继承的 C++ 多个类导致问题
【发布时间】:2013-07-27 03:48:15
【问题描述】:

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

此处代码:Source Code

【问题讨论】:

  • 请在问题中发布您的代码。
  • 不要链接到完整的代码,请编辑您的问题以包含一个 short, self-contained, correct (compilable) example 来证明您的问题。
  • 另外,请发布来自您的编译器的确切错误消息 - 以及您的编译器的名称和版本。

标签: c++ linux oop


【解决方案1】:

您将 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

【讨论】:

  • 我会鼓励使用#pragma once BTW ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
相关资源
最近更新 更多