枚举标头多个定义

Enum Header Multiple Defnitions

本文关键字:定义 枚举      更新时间:2023-10-16

>我遇到了这个"多个定义"错误,不知道该谁来修复它。

标题.h

    #ifndef HEADER_H
     #definde HEADER_H
     enum Gamestate{
         MENU,
         PLAY,
         PAUSE,
         GAMEOVER
        };
     Gamestate GAMESTATE = MENU;
#endif

主.cpp

#include "header.h"
switch(GAMESTATE){...}

如果我把 Gamestate GAMESTATE = MENU; 放在标题中.cpp main.cpp不知道变量。如果我以这种方式编译它,我会得到多个 Def .错误。

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

 #ifndef HEADER_H
 #definde HEADER_H
 enum Gamestate{
     MENU,
     PLAY,
     PAUSE,
     GAMEOVER
    };
 extern Gamestate GAMESTATE;
 #endif

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

 Gamestate GAMESTATE = MENU;

这意味着标头"header.h"包含在多个编译单元中。

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

您应该通过以下方式在标头中声明变量而不定义其

extern Gamestate GAMESTATE;

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

Gamestate GAMESTATE = MENU;