首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >枚举器的重新说明

枚举器的重新说明
EN

Stack Overflow用户
提问于 2010-10-12 10:13:21
回答 1查看 7.4K关注 0票数 2

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

代码语言:javascript
运行
复制
//foo.h

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

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

我的问题是,为什么我要重新声明枚举数?我的枚举位于不同的结构中,所以我可以使用以下代码,

代码语言:javascript
运行
复制
BG::black
FB::black

下面是确切的错误

代码语言:javascript
运行
复制
/home/sasayins/foobar/foo.h:10: error: redeclaration of enumerator ‘black’
/home/sasayins/foobar/foo.h:3: note: previous definition of ‘black’ was here
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-12 10:34:46

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

此外,如果您使用的是C编译器,则不能使用‘’这样的限定名FG::black‘或’BG::black‘来消除名称的歧义;C不会将双冒号识别为有效的符号。

来自下面的评论:

实际上,问题出在另一个文件中;我的C文件包含头文件,头文件包含一个C++代码文件,所以这就是问题的原因。所以我的头文件(foo.h)包含一个有效的代码。你能推荐一种C头文件的结构吗?

如果你需要你的头文件foo.h为了能够同时使用C和C++,使用单个枚举可能会做得最好,这样就不再需要FG::blackBG::black所有限定符:

代码语言:javascript
运行
复制
#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

请注意,需要使用typedefs来允许C代码引用BG, FGColour不带前缀struct或者enum;纯C++根本不需要这些typedefs。然而,您正在编写双语代码,有时您必须以一种或另一种语言看起来有点生硬的方式编写代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3911226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档