2015-07-20 185 views
2

我试图创建一个实体系统。 每个实体都有一个组件列表,每个组件都有一个指向父实体的指针。C++指针不完整的类类型是不允许的

========================示例代码:=================== ======

---------------Dog.h-------------------- 
    #include <string> 

    class AnimalCare; 
    class Dog 
    { 
    public: 
    Dog(AnimalCare* parent); 

    std::string GetParentName(); 
    void Feed(void*); 
    private: 
    AnimalCare* g_parent; 
    } 
    ---------------------------------------- 

    ----------------Dog.cpp----------------- 
    #include "Dog.h" 

    Dog::Dog(AnimalCare* parent){ 
    g_parent =parent; 
    } 

    void Dog::Feed(void* food){ 
    //TODO: Feeding 
    } 

    std::string Dog::GetParentName(){ 
    [1]return parent->GetName(); 
    } 
    ---------------------------------------- 

    ---------------AnimalCare.h------------- 
    #include "Dog.h" 

    class AnimalCare{ 
    public: 
     AnimalCare(std::string name); 

     std::string GetName(); 
     void InitDog(); 
    private: 
     std:string g_name; 
     Dog* g_dog; 
    }; 
    ---------------------------------------- 

    --------------AnimalCare.cpp------------ 
    #include "AnimalCare.h" 

    AnimalCare::AnimalCare(std::string name){ 
     g_name =name;} 

    std:string AnimalCare::GetName(){ 
     return g_name;} 

    void AnimalCare::InitDog(){ 
     g_dog = new Dog(this);} 

===================================== =======================

[1] - >我越来越指向不完整的类类型是不允许的。 我知道,这是因为Dog头部中的AnimalCare类只是声明了,但没有定义。 - >有没有办法解决这个问题? < -

+2

您需要在'Dog.cpp'中包含'AnimalCare.h'。 – TartanLlama

+0

我已经试过了,它给了我很多错误... – Narcis

+2

这些错误可能会指出你在正确的方向。你也不应该在'AnimalCare.h'中包含'Dog.h':一个前向声明可以。 – TartanLlama

回答

2

你需要把它添加到Dog.cpp:

#include "AnimalCare.h" 

而且,你缺少的;在您的Dog类声明之后,所以它应该是:

class Dog 
{ 
public: 
Dog(AnimalCare* parent); 

std::string GetParentName(); 
void Feed(void*); 
private: 
AnimalCare* g_parent; 
}; 
+0

谢谢你:D,它非常简单。 :(这只是一个示例代码,实际的代码是很大的, – Narcis

+0

没问题,有时只需要第二双眼睛来看看,如果它解决了你的问题,请接受这个答案。 – Mark

相关问题