首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum报头多重防御

Enum报头多重防御
EN

Stack Overflow用户
提问于 2016-01-31 11:10:49
回答 2查看 115关注 0票数 0

我有这个“多重定义”错误,不知道谁来修正它。

header.h

代码语言:javascript
复制
    #ifndef HEADER_H
     #definde HEADER_H

     enum Gamestate{
         MENU,
         PLAY,
         PAUSE,
         GAMEOVER
        };
     Gamestate GAMESTATE = MENU;

#endif

main.cpp

代码语言:javascript
复制
#include "header.h"

switch(GAMESTATE){...}

如果我把Gamestate =菜单放在header.cpp中,main.cpp就不知道变量了。如果我用这种方式编译它,就会得到多个Def。错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-31 11:17:47

您应该在标题中声明全局变量extern

代码语言:javascript
复制
 #ifndef HEADER_H
 #definde HEADER_H

 enum Gamestate{
     MENU,
     PLAY,
     PAUSE,
     GAMEOVER
    };

 extern Gamestate GAMESTATE;

 #endif

并在任何.cpp文件中提供一个定义:

代码语言:javascript
复制
 Gamestate GAMESTATE = MENU;
票数 2
EN

Stack Overflow用户

发布于 2016-01-31 11:17:49

这意味着头“header er.h”包含在多个编译单元中。

在这种情况下,在包含标头的每个模块中定义变量GAMESTATE。

您应该以以下方式声明变量,而不使用其定义的标头

代码语言:javascript
复制
extern Gamestate GAMESTATE;

然后,例如在main.cpp中定义如下

代码语言:javascript
复制
Gamestate GAMESTATE = MENU;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35113150

复制
相关文章

相似问题

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