当前位置 : 主页 > 编程语言 > c++ >

警告:在此功能之外不会显示’…’的声明[-Wvisibility]

来源:互联网 收集:自由互联 发布时间:2021-06-23
首先,我用Google搜索了错误并阅读了这些答案: I don’t understand why compiler is giving me error with this code C : Warning about visibility of a struct 但他们都没有帮助我,所以我们在这里. 问题存在于这两
首先,我用Google搜索了错误并阅读了这些答案:

> I don’t understand why compiler is giving me error with this code
> C : Warning about visibility of a struct

但他们都没有帮助我,所以我们在这里.

问题存在于这两个结构之间,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 *);
                   ^

欢迎所有帮助,谢谢:)

您的标头中存在循环依赖项问题:

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;
};
网友评论