Thắc mắc về SDL2

Em chào mọi người ạ. em đang bắt đầu tìm hiểu về c++ và SDL.
khi em code load 1 ảnh bmp lên thì nó không hiện ảnh chỉ hiện như thế này thôi ạ mà nó không hiện ảnh của em lên ạ.


mọi người giúp em sửa với được không ạ. Code của em đây ạ:

#include <iostream>

#include <SDL.h>

using namespace std;

#undef main
bool init(SDL_Window* window, SDL_Surface* surface) {
	if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
		cout << "SDL failed to initialize, SDL error: ", SDL_GetError();
		return false;
	}
	else {
		window = SDL_CreateWindow("Thaidz", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 800, SDL_WINDOW_SHOWN);
		if (window == NULL) {
			cout << "SDL failed to initialize, SDL error: ", SDL_GetError();
			return false;
		}
		else {
			surface = SDL_GetWindowSurface(window);
		}
	}
	return true;
}


bool LoadMedia(SDL_Surface* GetImage) {
	GetImage = SDL_LoadBMP("coca.bmp");
	if (GetImage == NULL) {
		cout << "Failed to load file! SDL error: ", SDL_GetError();
		return false;
	}
	return true;
}

void close(SDL_Window* window, SDL_Surface* surface, SDL_Surface* GetImage) {
	SDL_FreeSurface(GetImage);
	GetImage = NULL;
	SDL_DestroyWindow(window);
	window = NULL;
	SDL_Quit;
}
int main() {
	SDL_Window* window = NULL;
	SDL_Surface* surface = NULL;
	SDL_Surface* GetImage = NULL;
	if (!init(window, surface)) cout << "failed to initialize!";
	else {
		if (!LoadMedia(GetImage)) cout << "failes to load media";
		else {
			SDL_BlitSurface(GetImage, NULL, surface, NULL);
			SDL_UpdateWindowSurface(window);
			SDL_Delay(3000);
		}
	}
	close(window, surface, GetImage);
	return 0;
}

mọi người thay ảnh bmp khác vào giúp em với ạ vì em không tải được ảnh lên. và em cũng up ảnh vào file folder của code r ạ.
em cảm ơn nhiều ạ

em đọc tut ở đâu :V

bool LoadMedia(SDL_Surface* GetImage) // chỉ truyền copy của GetImage
bool LoadMedia(SDL_Surface*& GetImage) // thêm dấu & vô đây để truyền đích thị biến GetImage

tất cả mấy hàm khác cũng thêm & vô nha

bool init(SDL_Window*& window, SDL_Surface*& surface) 

// hàm close có thể ko cần
void close(SDL_Window*& window, SDL_Surface*& surface, SDL_Surface*& GetImage)

...
SDL_Quit; // cái gì đây

sao lại có dòng SDL_Quit; code này có compile được ko đấy :dizzy_face:

3 Likes

chắc lúc tìm lỗi em lỡ tay xóa đi ạ

em tưởng mình đã truyền con trỏ rồi ạ sao phải thêm tham chiếu làm gì ạ?

tại vì mấy biến em truyền vô cũng là con trỏ, nên nó giống như truyền biến bình thường vậy đó :V

void f(int a); // gọi f(n) thì a là copy của n
void g(int* b);
int* p;
// gọi g(p) thì b là copy của p

nếu em gán

void g(int* b) {
   *b = ...; // n sẽ bị thay đổi giá trị
   b = ...;  // chỉ có b thay đổi giá trị, p vẫn giữ nguyên, n giữ nguyên
}

int n = 0;
int* p = &n;
g(p);
3 Likes

wao hay quá em cảm ơn anh ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?