Премахване на глобалните променливи [hello_world project]
Привет,
аз съм малко назад все още. Това което се случва е, че прозорец излиза, но картинката не зарежда.
smeshan@ubuntu:~/workspace/HelloWorld/build$ ./hello_world
SDL_BlitSurface() failed. Reason: SDL_UpperBlit: passed a NULL surface
SDL_UpdateWindowSurface() failed. Reason: Invalid window
След if (globalScreenSurface == nullptr) в init() ми излиза адрес на пойнтъра, но веднага щом се върна в main пак става nullptr. Дори пробвах да сменя hello.bmp с bmp1 и там пропусна да отбележи грешка. Също ако пък е верен файла, получавам адрес, но връщайки се от loadResources() веднагa globalImage става nullptr. Така че предполагам е нещо по-основно и свързано с премахването на глобалните променливи.
Ето файлове:
main.cpp
CMakeLists.txt
Благодаря предварително,
Илиян
Привет, Илиян,
Радвам се, че си си намерил грешката.
Приятно е да работиш само с референции, а не с пойнтъри, защото наистина улесняват живота.
Когато обаче работим със С библиотека няма как да работим с референции, защото в С няма такива.
С течение на курса ще успеем да изградим С++ wrapper на библиотеката, който ще реши горния проблем.
Разбира се, това не значи, че един С++ програмист не трябва да работи с пойнтъри.
Пойнтърите са си обикновенни integer данни (size_t).
Щом подаваш пойнтър на функция - ти правиш копие на този пойнтър и имаш достъп до оригиналната памет под този пойнтър.
Когато обаче имаш нужда да модифицираш самия пойнтър трябва и него да предадеш по референция.
От там идва и "странният" синтаксис
void foo(int*& arr)
Което се чете референция към integer пойнтър.
Поздрави