Я объявил глобальный тип 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
Типы возврата синие
Нет — ключевые слова синие. Зачем еще 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