【发布时间】:2015-10-09 10:07:27
【问题描述】:
我正在尝试创建一个实体系统。 每个实体都有一个组件列表,每个组件都有一个指向父实体的指针。
=========================示例代码:==================== =====
---------------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 类只是声明但未定义。 ->有没有办法解决这个问题?
【问题讨论】:
-
您需要在
Dog.cpp中包含AnimalCare.h。 -
我试过了,它给了我很多错误...
-
这些错误可能会为您指明正确的方向。您也不应该在
AnimalCare.h中包含Dog.h:前向声明即可。 -
缺少分号“;”在狗课结束时。比在 .cpp 中包含 Dog.h。
-
在
Dog::GetParentName()你return parent->GetName();。我不明白您为什么会收到“指向不完整类型的指针”错误;你应该得到一个未定义的符号错误。您可能打算使用的成员是g_parent。您在问题中输入的代码是否与您实际尝试编译的代码相同?