不允许指向不完整类类型的c++指针

C++ pointer to incomplete class type is not allowed

本文关键字:类型 c++ 指针 不允许      更新时间:2023-10-16

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

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

---------------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] ->我得到指向不完整类类型的指针是不允许的。我知道,这是因为AnimalCare类在狗头只是声明,但没有定义。->有没有办法绕过这个?<-

您需要将此添加到Dog.cpp:

#include "AnimalCare.h"

还有,你错过了;在你为Dog的类声明之后,所以它应该是:

class Dog
{
public:
Dog(AnimalCare* parent);
std::string GetParentName();
void Feed(void*);
private:
AnimalCare* g_parent;
};