函数原型和枚举

Function prototypes and enum

本文关键字:枚举 原型 函数      更新时间:2023-10-16

我在程序中声明了一个全局枚举类型,并希望程序中的各种函数返回该枚举类型的实例。这是我的申报单:

#ifndef GLOBAL_H_
#define GLOBAL_H_
#include <SDL.h>
#include "LTexture.h"
#include "LButton.h"
#include "Initializationetc.h"
enum LButtonSprite
{
BUTTON_SPRITE_MOUSE_OUT = 0,
BUTTON_SPRITE_MOUSE_OVER_MOTION = 1,
BUTTON_SPRITE_MOUSE_DOWN = 2,
BUTTON_SPRITE_TOTAL = 2
};
...

然而,当我尝试构建一个返回"LButtonSprite"的函数时,会发生以下情况:

#ifndef LBUTTON_H
#define LBUTTON_H
#include <SDL.h>
#include "Global.h"
class LButton
{
public:
//Initializes internal variables
LButton();
//Sets top left position
void setPosition(int x, int y);
//Handles mouse event
void handleEvent(SDL_Event* e);
//Shows button sprite
void render();
LButtonSprite getCurrSprite();//here
private:
//Button Position
SDL_Point mPosition;
//Button Sprite
LButtonSprite mCurrentSprite; //and here.
};
#endif

Visual Studio似乎将函数原型LButtonSprite getCurrSprite();误认为是LButtonSprite类型的getCurrSprite()变量的声明。VS提供的颜色编码(如上所示)似乎证实了这一怀疑。返回类型为蓝色,但LButtonSprite为浅蓝色,这是为变量保留的颜色。

不幸的是,问题不只是表面上的。我得到了一堆C4430:缺少类型说明符-假定为int。注意:C++不支持default-int。我已经在发生错误的行向代码添加了注释。完整的错误日志包含在帖子的末尾。

我该如何纠正这个错误?

错误日志:

错误2错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2_tutorials\lbutton.h 22 1 sdl2_tutorials错误5错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 29 1 sdl2_tutorials错误8错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2_tutorials\lbutton.h 22 1 sdl2_tutorials错误11错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 29 1 sdl2_tutorials错误14错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2_tutorials\global.h 34 1 sdl2_tutorials错误17错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2_tutorials\lbutton.h 22 1 sdl2_tutorials错误20错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int C:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 29 1 sdl2_tutorials错误4错误C2146:语法错误:缺少";"标识符"mCurrentSprite"之前的c:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 29 1 sdl2_tutorials错误10错误C2146:语法错误:缺少";"标识符"mCurrentSprite"之前的c:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 29 1 sdl2_tutorials错误19错误C2146:语法错误:缺少";"标识符"mCurrentSprite"之前的c:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 29 1 sdl2_tutorials错误1错误C2146:语法错误:缺少";"标识符"getCurrSprite"之前的c:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 22 1 sdl2_tutorials错误7错误C2146:语法错误:缺少";"标识符"getCurrSprite"之前的c:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 22 1 sdl2_tutorials错误16错误C2146:语法错误:缺少";"标识符"getCurrSprite"之前的c:\users\adam\documents\visual studio 2013\projects\sdl2_tutorials\sdl2\tutorials\lbutton.h 22 1 sdl2_tutorials

返回类型为蓝色

否–关键字为蓝色。为什么enumclasspublicprivate是蓝色的?返回类型没有特殊的语法高亮显示。代码中的问题完全无关:

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

最后一行包含(因此声明)LButton类,在定义enum之前。从文件中删除该行,或在之前定义枚举。

我假设您使用的是VS2012。在VS2012中,所有用户定义的类型(返回值也不例外)都是浅蓝色。深蓝色是保留字。

函数的返回类型为浅蓝色的原因是因为返回类型是用户定义的类型。

从您的代码中,我看到#include "LButton.h"可能在声明enum LButtonSprite之前包含了class LButton的定义,因此IDE和编译器没有看到LButton中声明的LButtonSprite,因此颜色错误。

你应该反过来把LButtonSprite.h包括在LButton.h