枚举标题多个定义

时间:2016-01-31 11:10:50

标签: c++ enums header

我已经得到了这个"多个定义"错误,并且不知道修复者。

header.h

    #ifndef HEADER_H
     #definde HEADER_H

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

#endif

的main.cpp

#include "header.h"

switch(GAMESTATE){...}

如果我把Gamestate GAMESTATE = MENU;在header.cpp中,main.cpp不知道变量。如果我这样编译它我得到多个Def。错误。

2 个答案:

答案 0 :(得分:2)

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

 #ifndef HEADER_H
 #definde HEADER_H

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

 extern Gamestate GAMESTATE;

 #endif

并在您的.cpp个文件中提供定义:

 Gamestate GAMESTATE = MENU;

答案 1 :(得分:1)

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

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

您应该按照以下方式在标题中声明变量而不使用其定义

extern Gamestate GAMESTATE;

然后例如在main.cpp中将其定义为

Gamestate GAMESTATE = MENU;