разрешая к глобальному - PullRequest
       1

разрешая к глобальному

2 голосов
/ 02 февраля 2012

Я пытаюсь заставить объекты ссылаться на несколько глобализованных переменных (прежде чем вы начнете обращаться ко мне за использование глобальных переменных, помещая их в объект, это может сделать его недоступным для других объектов или потребовать добавления лишних аргументов к вызовам методов), например

main.cpp

bool firstLoop;
const int dt = 10;

thing.cpp

void thing::Update(Object * thingToUpdate){
    if( firstLoop){
        ...
    } else{
        // working with dt
    }
}

, но каждый раз, когда я пытаюсь получить доступ к переменным, я получаю ошибку "необъявленный идентификатор", мне нужнопометить их как extern или что-то еще.

1 Ответ

4 голосов
/ 02 февраля 2012

В thing.cpp, напишите

extern bool firstLoop;

Обратите внимание, что тот же трюк не будет работать для dt, потому что он имеет внутреннюю связь (потому что это const переменная встроенного типа).

Как правило, у вас должен быть один заголовочный файл, в котором вы объявляете extern) ваши переменные, к которым требуется доступ откуда угодно, и другой исходный файл, который определяет эти переменные. Постоянные переменные встроенного типа должны быть определены в заголовочном файле, или их связь должна быть явно сделана external с помощью ключевого слова selfsame extern . Затем файл заголовка должен быть включен везде, где требуется доступ. Пример:

//Globals.h

extern char ec;
extern const char ecc;
const char cc = 'a';

//Globals.cpp
char ec /* = 'b'*/;
extern const char ecc = 'b';
//no need to do anything with cc
...