函数原型和枚举
Function prototypes and enum
我在程序中声明了一个全局枚举类型,并希望程序中的各种函数返回该枚举类型的实例。这是我的申报单:
#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
返回类型为蓝色
否–关键字为蓝色。为什么enum
、class
、public
和private
是蓝色的?返回类型没有特殊的语法高亮显示。代码中的问题完全无关:
#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
中
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 函数原型和枚举