Я пытаюсь переписать часть учебника lazyfoo.net о событиях мыши только для практики. Я передумал свой дизайн после того, как кто-то на этом сайте предложил мне это сделать. Я решил попробовать добавить графический класс, а также убедиться, что члены класса не наследуются от класса, в котором они входят, что было одной из проблем в последний раз, когда я разместил вопрос. Пожалуйста, будьте терпеливы со мной, потому что я не очень опытный программист, и я нахожусь в середине обучения SDL2.0.Не объявлено в этой области, несмотря на включение правильного файла
Я запускаю Windows 10 на 64-разрядном ноутбуке Dell и используя Code :: Blocks 16.01.
Я попытался решить эту проблему, и я не думаю, что любой из вопросов, которые я нашел, относится к моей конкретной проблеме, поэтому после исправления множества других ошибок я, наконец, пришел к ошибке, что я не знаю, как исправить.
После попытки скомпилировать следующий код я получаю сообщение об ошибке, в котором говорится, что «mSpriteClips» не был объявлен в этой области », несмотря на то, что я включил CentralClass, где находится mSpriteClips, в мой файл cpp.
Вот код.
lbutton.cpp
#include "lbutton.h"
#include "lButtonSprite.h"
#include "global.h"
#include "graphics.h"
#include "ltexture.h"
#include "central_class.h"
LButton::LButton()
{
mButtonPosition.x = 0;
mButtonPosition.y = 0;
mCurrentSprite = button::MOUSE_OUT;
}
void LButton::setPosition(int x, int y)
{
mButtonPosition.x = x;
mButtonPosition.y = y;
}
void LButton::handleEvent(SDL_Event* e)
{
//If mouse event happened
if(e->type == SDL_MOUSEMOTION || e->type == SDL_MOUSEBUTTONDOWN || e->type == SDL_MOUSEBUTTONUP)
{
//Get mouse position
int x, y;
SDL_GetMouseState(&x, &y);
//Check if mouse is in button
bool inside = true;
//Mouse is left of the button
if(x < mButtonPosition.x)
inside = false;
//Mouse is right of the button
else if(x > mButtonPosition.x + global::BUTTON_WIDTH)
inside = false;
//Mouse above the button
else if(y < mButtonPosition.y)
inside = false;
//Mouse below the button
else if(y > mButtonPosition.y + global::BUTTON_HEIGHT)
inside = false;
//Mouse is outside button
if(!inside)
mCurrentSprite = button::MOUSE_OUT;
}
//Mouse is inside button
else
{
//Set mouse over sprite
switch(e->type)
{
case SDL_MOUSEMOTION:
mCurrentSprite = button::MOUSE_OVER_MOTION;
break;
case SDL_MOUSEBUTTONDOWN:
mCurrentSprite = button::MOUSE_DOWN;
break;
case SDL_MOUSEBUTTONUP:
mCurrentSprite = button::MOUSE_UP;
break;
}
}
}
void LButton::render(Graphics &graphics)
{
//Show current button sprite
mButtonSpriteSheet->render(mButtonPosition.x, mButtonPosition.y, graphics, &mSpriteClips[mCurrentSprite]);
}
и файл, который имеет элемент, который компилятор говорит не объявлена.
#ifndef CENTRAL_CLASS_H_INCLUDED
#define CENTRAL_CLASS_H_INCLUDED
#include <SDL.h>
#include "lButtonSprite.h"
#include "global.h"
#include "graphics.h"
class LButton;
class CentralClass : public Graphics
{
// Button objects
LButton *mButtons[global::TOTAL_BUTTONS];
// Mouse button sprite rectangles
SDL_Rect mSpriteClips[button::TOTAL];
public:
// Call all functions
CentralClass();
// Starts up SDL and creates window
bool init();
// Loads media
//bool loadMedia();
// Main part of the program
void mainLoop();
// Frees media and shuts down SDL
void close();
// Clean up
~CentralClass();
};
#endif // CENTRAL_CLASS_H_INCLUDED
Любая помощь приветствуется. Я хочу, чтобы эти сообщения об ошибках действительно говорили вам, в чем проблема. Это сделает кодирование более приятным.
Я не вижу, чтобы второй файл включал «central_class.h». – Shiping