2015-07-20 97 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

相關問題