在c

时间:2018-12-29 20:47:54

标签: c

我知道这个问题已经得到了很多答案,但是我读了很多主题,却找不到适合我的答案。 我得到了错误

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文件没有任何问题。这是一次学校练习,我的老师做了他们,并告诉我他们确实在工作。如果有人能帮助我会很高兴。

1 个答案:

答案 0 :(得分:1)

您无法在.cpp文件中隐藏PackAnimalImplementation的定义。任何想要对这种类型的对象“做事”的事情都需要知道它的外观。

将其移动到头文件中,或者如果想要将其全部隐藏起来,则可以参与一些PIMPL滑稽动作(但是然后,您将需要提供一些访问器函数,如果要定位C,则需要提供一些访问器函数)兼容性)。


进一步阅读: