Vectores C++ no funcionando con C++ SDL_Surface
#include
#include
#include
#include
#include
const int WIDTH = 800;
const int HEIGHT = 640;
int main()
{
std::vector<sdl_surface*> *devImages = {};
SDL_Surface *windowSurface = NULL;
SDL_Event windowEvent;
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = SDL_CreateWindow("Hello SDL World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI);
windowSurface = SDL_GetWindowSurface(window);
if(window == NULL){
std::cout<<"Could not create window: "<<sdl_geterror()<< std::endl;="" return="" 1;="" }="" if(!(img_init(img_init_png)="" &&="" img_init_png)){="" std::cout<<"could="" not="" create="" window:=""></sdl_geterror()<<><img_geterror()<< std::endl;="" return="" 1;="" }="" sdl_surface="" *img1="IMG_Load("Test.png");" sdl_surface="" *test="IMG_Load("Hi.png");" sdl_surface="" *f="IMG_Load("F.png");" auto="" it="*devImages-">insert(devImages->begin(), 3);
devImages->insert(it, 2);
// devImages->emplace_back(test);
// devImages->emplace_back(f);
while(true)
{
if(SDL_PollEvent(&windowEvent) && SDL_QUIT == windowEvent.type)
break;
//SDL_BlitSurface(imageSurface, NULL, windowSurface, NULL);
for(auto item: *devImages){
SDL_BlitSurface(&item, NULL, windowSurface, NULL);
}
SDL_UpdateWindowSurface(window);
}
//SDL_FreeSurface(imageSurface);
//dimageSurface = NULL;
windowSurface = NULL;
SDL_DestroyWindow(window);
SDL_Quit();
return EXIT_SUCCESS;
}</img_geterror()<<></sdl_surface*>
davy.ai
El problema con el código actual es que está intentando iterar a través de un puntero a un vector, el cual no está inicializado correctamente. Para iterar a través del vector, es mejor inicializarlo como un vector normal en lugar de un puntero, y utilizar push_back() para añadir las imágenes al vector.
Entonces, el código actualizado para inicializar e iterar a través del vector sería:
Aquí, el vector se declara como
std::vector<sdl_surface*> devImages
, que es un vector normal de punteros a objetosSDL_Surface
. Luego, las imágenes se añaden al vector utilizandopush_back()
. Finalmente, en el bucle de renderizado, se itera a través del vector utilizando un bucle de rango, y se renderizan las imágenes utilizandoSDL_BlitSurface()
.</sdl_surface></sdl_surface>