2015-12-14 7 views
0

Первый вопрос здесь, и ответ, вероятно, очень прост, но я не могу понять это. К моменту: В моем проекте я создал 2 класса: «GlobalVairables» и «SDLFunctions». Очевидно, что в первом я хочу хранить глобальные переменные, с которыми я мог бы относиться в любом другом классе, а во втором я получил несколько функций, используя эти глобальные переменные. Вот код:Глобальные переменные Класс C++

GlobalVariables.h

#pragma once 
class GlobalVariables 
{ 
public: 
GlobalVariables(void); 
~GlobalVariables(void); 

const int SCREEN_WIDTH; 
const int SCREEN_HEIGHT; 

//The window we'll be rendering to 
SDL_Window* gWindow; 

//The surface contained by the window 
SDL_Surface* gScreenSurface; 

//The image we will load and show on the screen 
SDL_Surface* gHelloWorld; 
}; 

и GlobalVariables.cpp

#include "GlobalVariables.h" 


GlobalVariables::GlobalVariables(void) 
{ 

const int GlobalVairables::SCREEN_WIDTH = 640; 
const int GlobalVariables::SCREEN_HEIGHT = 480; 

SDL_Window GlobalVairables:: gWindow = NULL; 

SDL_Surface GlobalVariables:: gScreenSurface = NULL; 

SDL_Surface GlobalVariables:: gHelloWorld = NULL; 
} 


GlobalVariables::~GlobalVariables(void) 
{ 
} 

и вот одна функция SDLFunction.cpp, которая использует "gWindow" и 2 других переменных:

gWindow = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 

Моя проблема в том, что при отладке я получаю

error C2065: 'gWindow' : undeclared indentifier 

Конечно, в SDLFunctions.cpp я получил «#include» GlobalVariables.h "". Кроме того, эти переменные являются общедоступными, поэтому это не так (вероятно). Может кто-нибудь сказать, что случилось? Есть ли какое-то простое решение, или я должен его реорганизовать и не должен использовать глобальные переменные? Пожалуйста помоги.

+1

Как эти переменные глобальные? Если вы измените всю строку, просто введите 'gWindow = null;' она должна работать. – forkrul

+0

Вы, кажется, не создаете экземпляр этого класса (который, вероятно, должен быть либо одноэлементным, либо пространством имен), и вы, кажется, неправильно ссылаетесь на идентификатор ('GlobalVariables :: gWindow', а не просто' gWindow') – UnholySheep

+0

@UnholySheep - это идиома Java: все это объект, за исключением случаев, когда это не так. Вы абсолютно правы, что это должно быть пространство имен со статическими членами данных, а не с классом. –

ответ

8

Прежде всего, ваши переменные являются членами каждого экземпляра класса и, как таковые, не являются глобальными в обычном значении. Возможно, вы захотите объявить их статическими. Что еще лучше, не создавайте для них класс вообще, вместо этого помещайте их в пространство имен. Что-то вроде следующего (в файле .h):

namespace globals { 
    static const unsigned int SCREEN_WIDTH = 640; 
    static const unsigned int SCREEN_HEIGHT = 1024; 
} 

Чем вы можете ссылаться на них в коде в следующем порядке:

int dot = globals::SCREEN_WIDTH; 
Смежные вопросы