gpt4 book ai didi

c++ - C : Warning about visibility of a struct

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:37 25 4
gpt4 key购买 nike

我有一个复杂的 C 项目。在文件 message.h 中声明了这个结构

struct message  
{
int err;
struct header
{
char *protocol_version;
char *type;
long int sequence_number;
} header;
struct body
{
int num_tag;
char *tag_labels[LEN];
int num_attr_tag[LEN];
char *attr_labels[LEN][LEN];
char *attr_values[LEN][LEN];
char *attr_types[LEN][LEN];
} body;
};

在文件“castfunctions.h”中,我包含文件“message.h”并声明函数“setClientNat”

#include <message.h>
void *setClientNat(struct message *msg);

当我编译时,我有这个警告

castfunctions.h:warning: 
declaration of 'struct message' will not be visible outside of this function [-Wvisibility]
void *setClientNat(struct message *msg);

谁能帮帮我?

最佳答案

declaration of 'struct message' will not be visible outside of this function [-Wvisibility]

该警告意味着 struct message在那一点上没有声明,所以它作为一个无用的前向声明。

这意味着您显示的代码不是完整的事实,您的文件中包含的内容比您显示的要多得多 - 错误在于未显示给我们的代码。

以下是您可能会收到警告的几个原因;

  • #include <message.h>包含一个与您认为的完全不同的文件,去别处寻找另一个 message.h。

  • 你的消息中包含了守卫。h 就像这样

#ifndef MESSAGE_H
#define MESSAGE_H
struct message {
....
};
#endif`

然后像这样在源文件中使用头文件:

   #include <thisnthat.h>
#include <message.h>

恰巧 <thisnthat.h>文件还定义了一个
MESSAGE_H 宏,使整个 message.h 不可见。或者 thisnthat.h header 有一个 #define message something_else

  • 直接或间接与 message.h 一起包含的头文件中某处存在语法错误。去寻找失踪者;或 { 或 }

  • 你拼错了什么。您的评论表明当您执行 typedef struct Message 时错误消失了由于某种原因有Message有资本M .所以在某个地方你混淆了struct Message对比struct message

关于c++ - C : Warning about visibility of a struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20007364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com