我在程序中声明了一个全局枚举类型,并希望程序中的各种函数返回枚举类型的实例。这是我的声明:
#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 ++不支持default-int c:\ users \ adam \ documents \ visual studio 2013 \ projects \ sdl2_tutorials \ sdl2_tutorials \ lbutton.h 22 1 SDL2_tutorials 错误5错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ adam \ documents \ visual studio 2013 \ projects \ sdl2_tutorials \ sdl2_tutorials \ lbutton.h 29 1 SDL2_tutorials 错误8错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ adam \ documents \ visual studio 2013 \ projects \ sdl2_tutorials \ sdl2_tutorials \ lbutton.h 22 1 SDL2_tutorials 错误11错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ adam \ documents \ visual studio 2013 \ projects \ sdl2_tutorials \ sdl2_tutorials \ lbutton.h 29 1 SDL2_tutorials 错误14错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ adam \ documents \ visual studio 2013 \ projects \ sdl2_tutorials \ sdl2_tutorials \ global.h 34 1 SDL2_tutorials 错误17错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ adam \ documents \ visual studio 2013 \ projects \ sdl2_tutorials \ sdl2_tutorials \ lbutton.h 22 1 SDL2_tutorials 错误20错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-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
答案 0 :(得分:2)
返回类型为蓝色
否 - 关键字为蓝色。为什么enum
,class
,public
和private
会变成蓝色?返回类型没有特殊的语法突出显示。代码中的问题完全不相关:
#ifndef GLOBAL_H_
#define GLOBAL_H_
#include <SDL.h>
#include "LTexture.h"
#include "LButton.h"
最后一行包括(并声明)LButton
类,之前定义enum
。从文件中删除该行,或者之前定义枚举。
答案 1 :(得分:1)
我假设您使用VS2012。在VS2012中,所有用户定义的类型(返回值也不例外)都是浅蓝色。深蓝色是保留字。
函数返回类型为浅蓝色的原因是返回类型是用户定义的类型。
答案 2 :(得分:0)
从您的代码中我看到#include "LButton.h"
可能在声明class LButton
之前包含enum LButtonSprite
的定义,因此IDE和编译器看不到LButtonSprite
在LButton
中声明,因此颜色错误。
您应该反过来将LButtonSprite.h
包含在LButton.h