首先,我已经搜索了错误并阅读了以下答案:
但是他们都没有帮助我,所以我们来了。
问题出在这两个结构之间的某个地方,prx_data_s
存储通用数据,而prx_ops_s
定义指向将使用该数据的函数的指针。
我将简化示例的来源:
prx_data.h
#ifndef PRX_EXAMPLE_DATA_H
#define PRX_EXAMPLE_DATA_H
#include "prx_ops.h"
struct prx_data_s {
enum prx_op_t op;
char *keyquery;
};
char *get_query(struct prx_data_s *dt);
#endif
prx_data.c
#include "prx_data.h"
char *get_query(struct prx_data_s *dt)
{
return dt->keyquery;
}
prx_ops.h
#ifndef PRX_EXAMPLE_OPS_H
#define PRX_EXAMPLE_OPS_H
#include "prx_data.h"
enum prx_op_t {
PRX_EXAMPLE_OP = 2
};
struct prx_ops_s {
int (*dec) (struct prx_data_s *);
};
#endif
我正在尝试使用以下示例编译对象:
clang -c prx_data.c -o prx_data.o -std=c11 -g -Wall
这是输出错误:
In file included from prx_data.c:1:
In file included from ./prx_data.h:4:
./prx_ops.h:11:24: warning: declaration of 'struct prx_data_s' will not be visible outside of this function [-Wvisibility]
int (*dec) (struct prx_data_s *);
^
欢迎所有帮助,谢谢:)
答案 0 :(得分:4)
您的标头中存在循环依赖项问题
prx_data.h:
#include "prx_ops.h" <<< Here we do not yet see the struct definition
prx_ops.h:
#include "prx_data.h" <<<< Nothing will be included due to inclusion guards.
struct prx_ops_s {
int (*dec) (struct prx_data_s *); <<<< Here a new struct type is declared.
};
later back in prx_data.h:
struct prx_data_s {
enum prx_op_t op;
char *keyquery;
};
答案 1 :(得分:2)
在读取prx_ops.h
时,您没有包含prx_data.h
,因为编译器正在从prx_ops.h
开头的包含中读取prx_data.h
。因此,您必须向前声明它。
尝试添加
struct prx_data_s;
在prx_ops.h的开头
希望有帮助~~