我有一个简单的头文件,其中包含以下代码:
#include < stdio.h >
#include < pthread.h >
void init(struct prodcons * b);
void put(struct prodcons * b, int data);
int get(struct prodcons * b);
void * producer(void * data);
void * consumer(void * data);
当我编译终端时给出这四个警告:
producer_consumer.h:4:18: aviso: ‘struct prodcons’ declared inside parameter list [enabled by default]
producer_consumer.h:4:18: aviso: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
producer_consumer.h:6:17: aviso: ‘struct prodcons’ declared inside parameter list [enabled by default]
producer_consumer.h:8:16: aviso: ‘struct prodcons’ declared inside parameter list [enabled by default]
答案 0 :(得分:1)
您需要在某处声明struct prodcons
。现在没有声明它,所以编译器推断它。
大概你在另一个文件中有一个声明 - 如果它在另一个标题中,在它使用它的所有函数之前,在它.h文件的顶部添加一个#include
指令。
答案 1 :(得分:1)
编译器抱怨&#34; struct prodcons&#34;缺少声明。你必须包含一个实际给出该结构声明的头文件,或者你必须插入该结构的前向声明,就像写:
struct prodcons;
答案 2 :(得分:0)
struct prodcons
尚未在任何地方定义。您需要在这些原型之前定义它,或#include
定义它的头文件。
由于参数列表是编译器第一次看到struct prodcons
,因此它假设您在那里声明它(这没有任何意义)。