ошибка: "экран" не был объявлен в этой области - PullRequest
0 голосов
/ 05 мая 2011

У меня проблемы с C ++. Я делаю класс Engine для своей игры, который обрабатывает графику с использованием SDL. Класс Engine (надеюсь, правильно реализован) Singleton.

engine.h

#ifndef H_ENGINE
#define H_ENGINE

#ifndef H_SDL
#include "SDL/SDL.h"
#endif

class Engine {
public:
    static Engine *getInstance(); //This returns the singleton object of class
    int init(int screenWidth, int screenHeight); //must initialize before use
    ~Engine(); //destructor

private:
    Engine(); //private constructor
    static Engine *instance; //stores the single instance of the class
    SDL_Surface *screen; //Struct for SDL
};

#endif

engine.cpp

#include "engine.h"

Engine *Engine::instance = NULL;

Engine::Engine() {
    screen = NULL;
}

Engine *Engine::getInstance() {
if(instance == NULL)
    instance = new Engine();

return instance;
}

int init(int screenWidth, int screenHeight) {
SDL_Init(SDL_INIT_EVERYTHING);

//This line has the error: error: ‘screen’ was not declared in this scope
screen = SDL_SetVideoMode(screenWidth, screenHeight, 32, SDL_SWSURFACE);

return 1;
}

Engine::~Engine() {
SDL_Quit();
}

main.cpp : содержит строку

Engine::getInstance()->init(600, 400);

Любая помощь будет оценена

Ответы [ 2 ]

6 голосов
/ 05 мая 2011

Вы забыли поставить классификатор класса на init:

int Engine::init(int screenWidth, int screenHeight)

Бывает все время.

0 голосов
/ 05 мая 2011

Вы определяете init как:

int init(int screenWidth, int screenHeight) {

Однако это определяет функцию в глобальной области видимости (там нет переменной screen).

Вместо этого, если вы напишите:

int Engine::init(int screenWidth, int screenHeight) {

Вы определите функцию вашего класса.

...