Экстерн применяется ко всем файлам 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"
.