




Вам нужно создать экземпляр базы данных вне main (), иначе вы просто объявите локальную переменную, затеняющую глобальную.
GameServer.cpp:
#include GameSocket.h
Database db(1, 2, 3);
int main() {
//whatever
}
Незначительный момент, но он не затеняет глобальный, потому что нет глобального - просто ссылка на тот, который не существует.
Внешний вид применяется ко всем файлам CPP (и результирующим файлам OBJ), поэтому ни один из них никогда не создает экземпляр БД.
Вот один способ обойти это. В Database.h измените extern Database db на:
#ifdef INSTANTIATE_DB
Database db;
#else
extern Database db;
#endif
а затем в одном из ваших файлов CPP (подойдет Database.cpp, если он у вас есть) добавьте #define INSTANTIATE_DB перед #include "Database.h".
Можно и так, но не особо чисто.
Проблема в объеме объявления db. Код:
extern Database db;
на самом деле означает, что "db объявлен как где-то глобально, но не здесь". Тогда код не продвигается вперед и фактически объявляет его глобально, а локально внутри main (), который не виден за пределами main (). Код должен выглядеть так, чтобы решить вашу проблему со связью:
Database db;
int main ()
{
...
}
extern Database db;
void some_function ()
{
...
}
Вот и все. «[some var] объявлен где-то глобально, но не здесь». В каждом другом ответе относительно ключевого слова extern не было этого объяснения. Большое спасибо!
Как видите, код проще картинок. Сократите свой код до минимального количества строк, отражающих вашу проблему. Разместите тех. Изображения не так точны, как фрагменты кода, упрощенные до основных проблем.