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

0

Я объявил глобальный тип перечисления в своей программе и хочу, чтобы в моей программе различные функции возвращали экземпляры типа перечисления. Вот моя декларация:

#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
    Вы действительно получаете ошибку при компиляции? Или вы просто хотите другой цвет на экране? (Из того, что я вижу, код выглядит хорошо)
  • 0
    Что говорит компилятор? Единственной возможной ошибкой может быть то, что class LButton определен перед enum LButtonSprite (первый из них включен в LButton.h ). Как называются заголовочные файлы?
Показать ещё 5 комментариев
Теги:
enums
global
function-prototypes

3 ответа

2
Лучший ответ

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

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

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

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

1

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

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

  • 0
    Это не ответ, хотя.
  • 0
    Как так? Я объяснил, почему возвращаемый тип имеет голубой цвет.
Показать ещё 2 комментария
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню