Вы объявили loadedSurfaces
, но не определили его.Чтобы фактически объявить переменную, нужно добавить следующее ровно в одну единицу перевода:
map<string, SDL_Surface*> CSurface::loadedSurfaces;
Как и сейчас, loadedSurfaces
внутри определения класса похоже на прототип функции.Когда вы пытаетесь использовать его, компоновщик идет и ищет его, потому что он видит предварительное объявление, но нигде не находит фактического определения.Вы должны дать ему определение, и компоновщик будет удовлетворен, потому что он знает, о какой фактической переменной в какой фактической единице перевода все говорят, когда они используют имя loadedSurfaces
.