gpt4 book ai didi

c++ - 重新声明枚举器

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:33 26 4
gpt4 key购买 nike

我在编译代码时遇到错误:枚举器消息的重新声明,请从我的 foo.h 头文件中查看下面的代码,

//foo.h

struct FG
{
enum
{
black = 1,
red = 2,
green = 3
};
};

struct BG
{
enum
{
black = 1,
red = 2,
green = 3
};
};

我的问题是,为什么我要重新声明枚举器?我的枚举在不同的结构中,所以我可以使用以下内容,

BG::black
FB::black

这是准确的错误

/home/sasayins/foobar/foo.h:10: error: redeclaration of enumerator ‘black’
/home/sasayins/foobar/foo.h:3: note: previous definition of ‘black’ was here

最佳答案

如评论中所述,如果您使用 C 编译器而不是 C++ 编译器来编译代码,那么您将不可避免地遇到显示的错误。该代码仅在 C++ 中有效,因此您必须使用 C++ 编译器对其进行编译。

此外,如果您使用的是 C 编译器,您将无法使用限定名称,如“FG::black”或“BG::black” ' 消除名字的歧义; C 不将双冒号识别为有效符号。


来自以下评论:

Actually the problem is in another file; my C file includes the header file, which is the header contains a C++ code file, so that is the cause of the problem. So my header file (foo.h) contains a valid code. Could you suggest a structure for C header file?

如果您需要头文件 foo.h 在 C 和 C++ 中是双语的,您最好使用单个枚举,而不需要 FG::blackBG::black 完全限定符:

#ifndef FOO_H_INCLUDED
#define FOO_H_INCLUDED

typedef enum Colour
{
black = 1,
red = 2,
green = 3
} Colour;

typedef struct FG
{
...
Colour shade;
...
} FG;

typedef struct BG
{
...
Colour shade;
...
} BG;

#endif // FOO_H_INCLUDED

请注意,需要 typedef 以允许 C 代码引用 BGFGColour 而无需前缀 structenum;纯 C++ 根本不需要那些类型定义。但是,您正在编写双语代码,有时您不得不以一种看起来有点生硬的方式编写一种或另一种语言。

关于c++ - 重新声明枚举器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911226/

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