Я объявил глобальный тип перечисления в своей программе и хочу, чтобы в моей программе различные функции возвращали экземпляры типа перечисления. Вот моя декларация:
#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();
для объявления переменной, называемой getCurrSprite() типа LButtonSprite. Цветное кодирование, предоставляемое 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
Типы возврата - синий
Нет - ключевые слова - синие. Почему еще нужно было бы 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"
вероятно, содержащий определение class LButton
перед объявлением enum LButtonSprite
, поэтому среда IDE и компилятор не видят LButtonSprite
объявленный в LButton
, следовательно, неправильную раскраску.
Вы должны включить его наоборот, LButtonSprite.h
в LButton.h
class LButton
определен передenum LButtonSprite
(первый из них включен вLButton.h
). Как называются заголовочные файлы?