gpt4 book ai didi

C 未知类型名称 'DATA'

转载 作者:行者123 更新时间:2023-11-30 15:23:20 24 4
gpt4 key购买 nike

我真的不明白为什么会收到此错误:未知类型名称“DATA”。

#include <stdio.h>
#include <stdlib.h>

typedef int DATA;
#include "PriorityQueue.h"


int main(){
int priority;
DATA value;
LINK *head;
createEmpty(&head);
add(&head, 1, 7);
checkIfEmpty(head);
add(&head, 5, 5);
add(&head, 3, 4);
deleteElement(&head, &priority, &value);
add(&head, 1, 3);
destroy(head);
createEmpty(&head);
add(&head, 10, 10);
return 0;
}

主要

#include <stdio.h>
#include <stdlib.h>

#include "PriorityQueue.h"

void add(LINK **head, int p, DATA v){
LINK *curr=(*head);
LINK *beforeCurr=(*head);
LINK *newElement=NULL;
if((*head)->priority==-1){
(*head)->priority=p;
(*head)->value=v;
}

else{
newElement=(LINK*)malloc(sizeof(LINK));
newElement->priority=p;
newElement->value=v;
newElement->next=NULL;

while(p>(curr->priority) && curr->next!=NULL){
beforeCurr=curr;
curr=curr->next;
}

if(curr->next==NULL && p>(curr->priority))
curr->next=newElement;

else if(curr==(*head)){
newElement->next=curr;
(*head)=newElement;
}
else{
beforeCurr->next=newElement;
newElement->next=curr;
}
}
}

void deleteElement(LINK **head, int *p, DATA *v){
LINK *curr=(*head);
LINK *currB=(*head);
while(curr->next!=NULL) {
currB=curr;
curr=curr->next;
}
currB->next=NULL;
(*p)=curr->priority;
(*v)=curr->value;
free(curr);
}

void checkIfEmpty(LINK *head){
if(head->priority==-1)
printf("Queue is empty\n\n");
else
printf("Queue is not empty\n\n");
}

void destroy(LINK *head) {
LINK *current;
LINK *next;
current=head;
while(current!=NULL){
next=current->next;
free(current);
current=next;
}
head=NULL;
}


void createEmpty(LINK **head) {
LINK *curr=NULL;
curr=(LINK*)malloc(sizeof(LINK));
curr->next = NULL;
curr->priority = -1;
(*head)=curr;
}

函数文件

#ifndef PRIORITY_QUEUE_H_
#define PRIORITY_QUEUE_H_

typedef struct priorityQueue{
int priority;
DATA value;
struct priorityQueue *next;
}LINK;

void createEmpty(LINK **head);
void add(LINK **head, int p, DATA v);
void deleteElement(LINK **head, int *p, DATA *v);
void checkIfEmpty(LINK *head);
void destroy(LINK *head);
#endif

标题

我使用代码块上的项目来编译它。另外,“typedef int DATA;”首选在 main 上

最佳答案

typedef 关键字遵循范围规则,如下所述: Are typedef and #define the same in c?

这意味着如果您声明:

typedef int DATA;

并且此行不包含在另一个文件中,因此不会在那里声明。

DATA 应在每个使用它的文件中声明,方法是包含声明它的另一个文件或显式声明它。

关于C 未知类型名称 'DATA',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com