我知道这个问题已经得到了很多答案,但是我读了很多主题,却找不到适合我的答案。 我得到了错误
invalid use of incomplete type ‘struct PackAnimalImplementation’
if(animal->type != 0 && current == caravan)
获取以下代码:
#include <stdlib.h>
#include "caravan.h"
#include "general.h"
#define COUNT_CARAVANS 5
/*
Basically our Node
*/
struct CaravanImplementation{
int length;
PackAnimal animal;
struct CaravanImplementation* next;
};
Caravan head = (Caravan)malloc(sizeof(struct CaravanImplementation));
void add_pack_animal(Caravan caravan, PackAnimal animal)
{
Caravan current = head;
while(current != 0){
if(animal->type != 0 && current == caravan)
{
current->animal = animal;
return;
}
}
}
这是我要使用的结构,它在pack_animal.cpp文件中,并在pack_animal.h文件中声明:
转发声明:
typedef struct PackAnimalImplementation* PackAnimal;
cpp文件中的定义:
struct PackAnimalImplementation {
AnimalType type; //The AnimalType is an enum with 2 values: Horse and Camel
const char *name;
int max_speed;
int load;
Caravan caravan;
};
caravan.h,pack_animal.h和pack_animal.cpp文件没有任何问题。这是一次学校练习,我的老师做了他们,并告诉我他们确实在工作。如果有人能帮助我会很高兴。
答案 0 :(得分:1)
您无法在.cpp文件中隐藏PackAnimalImplementation
的定义。任何想要对这种类型的对象“做事”的事情都需要知道它的外观。
将其移动到头文件中,或者如果想要将其全部隐藏起来,则可以参与一些PIMPL滑稽动作(但是然后,您将需要提供一些访问器函数,如果要定位C,则需要提供一些访问器函数)兼容性)。
进一步阅读: