Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将main中定义的类型传递给C中的header_C_Header_Typedef - Fatal编程技术网

将main中定义的类型传递给C中的header

将main中定义的类型传递给C中的header,c,header,typedef,C,Header,Typedef,所以,正如标题所说,我应该在主文件中定义一个类型,并以某种方式将其传递给头文件。我试过用任何方式去做,但我没有主意 我这样定义它:“typedef int DATA;”,并在header中将其用作数据类型 我尝试在包含标题之前插入typedef,但仍然无法识别 有什么想法吗?或者甚至不可能这样做 #include <stdio.h> #include <stdlib.h> typedef int DATA; #include "PriorityQueue.h" in

所以,正如标题所说,我应该在主文件中定义一个类型,并以某种方式将其传递给头文件。我试过用任何方式去做,但我没有主意

我这样定义它:“typedef int DATA;”,并在header中将其用作数据类型

我尝试在包含标题之前插入typedef,但仍然无法识别

有什么想法吗?或者甚至不可能这样做

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

typedef int DATA;

#include "PriorityQueue.h"

int main(){
    int priority;
    DATA value;
标题

||=== Build: Release in PriorityQueue (compiler: GNU GCC Compiler) ===|
~\PriorityQueue\PriorityQueue.h|6|error: unknown type name 'DATA'|
~\PriorityQueue\PriorityQueue.h|11|error: unknown type name 'DATA'| 
~\PriorityQueue\PriorityQueue.h|12|error: unknown type name 'DATA'| 
~\PriorityQueue\PriorityQueue.c|10|error: unknown type name 'DATA'| 
~\PriorityQueue\PriorityQueue.c|44|error: unknown type name 'DATA'| 
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 Used ~ instead of my destination

通常你不应该这样做,但假设你有一个很好的理由这样做,如果你把typedef放在包含之前,它就会起作用。我不知道你是如何测试它的,但这对我来说还可以

$cat header.h

typedef struct 
{
  MYDATA a;
  MYDATA b;
} MYSTRUCT;
$cat main.c

typedef int MYDATA;
#include "header.h"

int main (int argc, char **argv)
{ 
 MYSTRUCT s = {0, 1};
 s.a = 1;
 s.b++;

 return 0;
}

它在没有警告的情况下编译,并使用gdb执行它。我看到正确定义的类型

Put
typedef int数据,并确保PriorityQueue.h包含在PriorityQueue.c中。

显示问题的最小示例代码。很可能您的typedef应该在标题中,但您所做的有点不清楚。@user694733我已经添加了一点程序,但是,当我将其编译为project时,它给了我一个错误:错误:未知类型名称“DATA”。我使用代码块创建项目。在哪里定义了
add
deletelement
函数?若它们和main不在同一个文件中,那个么
数据在那个里将不可用,并且可能会抛出编译错误。如果您添加了完整的编译器错误消息,可能会有所帮助。@user694733我在头文件中的数据行和其他定义了我的函数的文件中得到了相同的错误,没有其他类型的错误。请发布完整的错误消息。嗯,您的错误消息也适用于我,但我的错误消息不适用。我会添加我的程序,你的工作也为我。我用
value=1
value++
完成了main,看看它是否有作用。它编译时带有一条关于
优先级
未使用和正常运行的警告。您得到的具体错误是什么?错误:未知类型名称“DATA”。当我单独启动我的程序时,它工作正常。但是当我尝试做一个项目(使用代码块)时,它给了我这个。
typedef int MYDATA;
#include "header.h"

int main (int argc, char **argv)
{ 
 MYSTRUCT s = {0, 1};
 s.a = 1;
 s.b++;

 return 0;
}