C++ 重构枚举块c++;

C++ 重构枚举块c++;,c++,enums,refactoring,global,C++,Enums,Refactoring,Global,我目前正在尝试将一个大型的“一体式文件”程序分解为单独的模块,以使其更易于使用。我的问题是,程序的原始(全部在一个文件中)版本使用了枚举声明。我想在新版本的程序中继续使用这个声明,这个程序被分为多个类,但我不确定最好的方法是什么 最简单的解决方法是把枚举块放在头文件中,并尝试将它作为全局变量(我知道全局变量一般都是坏的,这是一个适当的用法),但是,它产生了一组“错误C44:缺少类型指定符-int假设。注意:C++不支持默认int”。 我意识到这与以前提出的问题类似。然而,我能找到的所有答案都有点

我目前正在尝试将一个大型的“一体式文件”程序分解为单独的模块,以使其更易于使用。我的问题是,程序的原始(全部在一个文件中)版本使用了枚举声明。我想在新版本的程序中继续使用这个声明,这个程序被分为多个类,但我不确定最好的方法是什么

最简单的解决方法是把枚举块放在头文件中,并尝试将它作为全局变量(我知道全局变量一般都是坏的,这是一个适当的用法),但是,它产生了一组“错误C44:缺少类型指定符-int假设。注意:C++不支持默认int”。 我意识到这与以前提出的问题类似。然而,我能找到的所有答案都有点技术性太强,或者不是我想要的

下面包括我的Global.h文件和发生错误的文件

#ifndef GLOBAL_H_
#define GLOBAL_H_
#include <SDL.h>
#include "LTexture.h"
#include "LButton.h"


enum LButtonSprite
{
    BUTTON_SPRITE_MOUSE_OUT = 0,
    BUTTON_SPRITE_MOUSE_OVER_MOTION = 1,
    BUTTON_SPRITE_MOUSE_DOWN = 2,
    BUTTON_SPRITE_TOTAL = 2
};
.
.
#endif GLOBAL_H_
\ifndef GLOBAL\u H_
#定义全局_
#包括
#包括“LTexture.h”
#包括“LButton.h”
枚举LButtonSprite
{
按钮\精灵\鼠标\输出=0,
按钮\精灵\鼠标\上方\运动=1,
按钮\精灵\鼠标\向下=2,
按钮\u精灵\u总数=2
};
.
.
#endif全局_H_

\ifndef LBUTTON\u H
#定义按钮
#包括
#包括“Global.h”
类按钮
{
公众:
//初始化内部变量
b按钮();
//设置左上角位置
无效设置位置(整数x,整数y);
//处理鼠标事件
无效handleEvent(SDL_事件*e);
//显示按钮精灵
void render();
LButtonSprite getCurrSprite();//问题就在这里
私人:
//按钮位置
SDL_点组合;
//纽扣雪碧
LButtonSprite mCurrentSprite;//这里
};
#恩迪夫
首先,是什么导致了这个错误?第二,有人能提出一个更好的方法来实现我的目标吗

我怀疑编译器混淆了变量的LButtonSprite。这是基于VS提供的颜色编码(返回类型为蓝色,但LButtonSprite为浅蓝色)。从LButton.h(包括在下面)中可以看出,LButtonSprite应该作为返回类型而不是变量来读取


谢谢

如果没有'extern'关键字,您发布的内容就可以了

为了避免命名冲突,可以将枚举放在命名空间或类中


另外,如果LButton是唯一使用此枚举的类,那么它也可以在LButton本身的类定义中定义。

这没有意义。为什么在定义它时要声明它
extern
extern
用于在别处定义的声明。

Global.h
LButton.h
每个
都包含另一个
。这意味着编译器先看到
LButton
类,然后才能看到
LButtonSprite
enum,这就是您看到错误消息的原因。要么移除

#include "LButton.h"

Global.h
或至少将其放在
enum
声明下方。

LButtonSprite
是一种类型,不是变量,不能声明
extern
#include "LButton.h"