函数原型和枚举

时间:2013-12-29 16:36:45

标签: c++ enums global function-prototypes

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

#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

3 个答案:

答案 0 :(得分:2)

  

返回类型为蓝色

否 - 关键字为蓝色。为什么enumclasspublicprivate会变成蓝色?返回类型没有特殊的语法突出显示。代码中的问题完全不相关:

#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和编译器看不到LButtonSpriteLButton中声明,因此颜色错误。

您应该反过来将LButtonSprite.h包含在LButton.h