2013-07-26 2 views
1

Итак, у меня в основном разработан «Привет, мир!». OOP с C++. У меня есть 2 класса, курица и собака, которые унаследованы от общественного животного. В int main, когда я создаю экземпляр каждого из них, я получаю сообщения об ошибках, которые утверждают, что я создал несколько экземпляров класса Animal.C++ несколько классов, наследующих от базового класса, вызывающие проблемы

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

+8

Пожалуйста, внесите свой код в вопрос. –

+6

Вместо ссылки на полный код, пожалуйста, отредактируйте свой вопрос, включив в него [короткий, автономный, правильный (компилируемый) пример] (http://sscce.org/), который демонстрирует вашу проблему. – ruakh

+3

Кроме того, отправьте точные сообщения об ошибках из вашего компилятора, а также имя и версию вашего компилятора. – Kevin

ответ

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

Смежные вопросы