1

我有一个简单的头文件,其中包含以下代码:

#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]
4

3 回答 3

1

你需要在struct prodcons某处声明。现在没有它的声明,所以编译器正在推断它。

大概你在另一个文件中有一个声明——如果它在另一个头#include文件中,在所有使用它的函数之前添加一个指令到这个 .h 文件的顶部。

于 2013-11-01T00:30:02.417 回答
1

编译器抱怨缺少“struct prodcons”声明。您必须包含一个实际给出该结构声明的头文件,或者您必须插入该结构的前向声明,就像写:

struct prodcons;
于 2013-11-01T00:32:39.537 回答
0

struct prodcons尚未在任何地方定义。您需要在那些原型之前定义它,或者#include定义它的头文件。

由于参数列表是编译器第一次看到struct prodcons,它假定您在此处声明它(这没有任何意义)。

于 2013-11-01T00:29:28.190 回答