不允许使用C ++指向不完整类类型的指针

时间:2015-07-20 10:13:39

标签: c++ class pointers c++11

我试图创建一个实体系统。   每个实体都有一个组件列表,每个组件都有一个指向父实体的指针。

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

---------------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] - &gt;我不允许获取指向不完整类类型的指针。 我知道,这是因为Dog header中的AnimalCare类只是声明但未定义。 - &gt;有办法解决这个问题吗?&lt; -

1 个答案:

答案 0 :(得分:2)

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

#include "AnimalCare.h"

另外,你错过了;在你的Dog声明之后,它应该是:

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

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