C 未知类型名称 'DATA'

标签 c compiler-errors codeblocks typedef

我真的不明白为什么会收到此错误:未知类型名称“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/

相关文章:

c - int* vector 仅接受第一个给定值

c - 使创建的菜单的菜单项可使用 GTK+ 运行

c - 这是否被认为是未定义行为 x =++x % 5;

java - 如何解决javac编译器错误 “package com.sun.tools.internal.ws.processor.model does not exist”?

c++ - 使用未声明的标识符 'buffer'和未使用的变量 'buffer'

linux - 在 code::blocks linux 编译器中,如何添加编译标志,如 '-lrt' 或 '-lboost_thread'?

c - memcpy regex_t 安全吗?

xml - 运行ant build.xml时出错

c++ - 如何在代码块中调试?

使用 CMake 和 MinGW 的 OpenCV 2.4.2 库文件 - 目标 IDE 代码块