我有以下列表,一种是用连接的结构制成的包装,另一种是用静态阵列制成的卡车。
typedef struct
{
int id_pack;
int weight_kg;
int value;
int priority; //low 0, high 1
struct pack* next;
} pack;
typedef struct pack head; //declaring a struct head of type pack which is the head of a list of packs
typedef struct
{
int id_truck;
head* p_head; //pointer to the list of packs of each truck
} truck;
int main()
{
truck dogana[N]; //list of trucks made with a static array
}
现在,我要创建一个函数来检查第一辆卡车的包装清单中至少一个包装的优先级是否为高优先级(1)。 为了做到这一点,我想到了一个临时指针,以避免丢失对包列表开头的引用(我需要在其他其他事情中使用它,我必须在函数内部执行此操作);这是我的职责。
void uscita_dogana (truck dogana[])
{
head* temp;
temp = dogana[0].p_head; // I use temp to avoid losing the head
while (temp != NULL) //cicle to run trough the packs
{
if (temp->priority == 1) //check the priority of the pack
{
//INSTRUCTIONS
}
}
}
现在编译器给我一个错误 temp-> priority == 1 上面写着“取消指向不完整类型'head {aka struct pack}的指针;
我尝试了许多不同的方法来解决此问题,但是没有成功。 我寻求帮助,并在网站上进行了搜索,但找不到正确的解决方案,希望有人可以帮助我!
对于普遍的困惑,我感到抱歉,英语不是我的母语,我才刚刚开始编码。预先感谢!
答案 0 :(得分:2)
您已将类型pack
定义为匿名结构的别名(请注意,struct
中关键字typedef struct { ... } pack
之后没有标识符。
稍后定义
typedef struct pack head;
然后您指的是struct pack
,尚未定义。编译器会将其记为不完整类型,因此head
也将为不完整类型。这就是为什么temp->priority
具有temp
类型为head
的原因。
写
typedef pack head;
它应该可以工作。