Прототипы функций и перечисление

Я объявил глобальный тип enum в моей программе и хочу, чтобы различные функции в моей программе возвращали экземпляры типа 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(); для объявления переменной с именем 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

0

Решение

Типы возврата синие

Нет — ключевые слова синие. Зачем еще enum, class, public а также private быть синим? Типы возврата не имеют специальной подсветки синтаксиса. Проблема в вашем коде совершенно не связана:

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

Последняя строка включает в себя (и, следовательно, объявляет) LButton учебный класс, до Вы определяете свой enum, Удалите эту строку из файла или определите перечисление ранее.

2

Другие решения

Я предполагаю, что вы используете VS2012. В VS2012 все пользовательские типы (возвращаемые значения не являются исключением) окрашены в светло-голубой цвет. Темно-синие зарезервированные слова.

Причина, по которой тип возврата вашей функции светло-синий, заключается в том, что тип возвращаемого значения является определяемым пользователем типом.

1

Из вашего кода я вижу, у вас есть #include "LButton.h" вероятно, содержащий определение class LButton до объявления enum LButtonSpriteпоэтому IDE и компилятор не видят LButtonSprite объявлено в LButtonотсюда и неправильная окраска.

Вы должны включить это наоборот, LButtonSprite.h в LButton.h

0
По вопросам рекламы [email protected]