• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podwójny wskaźnik na obiekt - przekazanie do funkcji

0 głosów
435 wizyt
pytanie zadane 1 lipca 2019 w C i C++ przez aram100 Użytkownik (500 p.)

Hej, robię sobie małą gierkę 2D w SDL2 i napotkałem mały problem związany z przekazaniem wskaźnika na obiekt do funkcji.

Gdy mam wszystko w mainie, działa jak należy

int main(int argc, char **argv) {
/*
    jakiś kod
*/

int rc = 0;
SDL_Window *window = nullptr;
SDL_Renderer *renderer = nullptr;

/*
    jakiś kod
*/

if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
		return 1;
	}

	rc = SDL_CreateWindowAndRenderer(SCREEN_WIDTH, SCREEN_HEIGHT, 0, &window, &renderer);
	if (rc != 0) {
		SDL_Quit();
		return 1;
	}

/*
    jakiś kod
*/

}

Okienko się ładnie inicjalizuje i jest gra działa ok.

Jednak chciałem całą inicjalizację spakować do funkcji init, gdzie już ładuję różne inne rzeczy, ale nie wiem jak przekazać poprawnie te wskaźniki window i renderer (pojedyncze), bo ogólnie funkcja SDL_CreateWindowAndRenderer wymaga wskaźnika na wskaźnik: SDL_Window** ,SDL_Renderer**.

Udało mi się to przekazać w mainie, ale przekazanie obiektów do funkcji rządzi się swoimi prawami i nie rozumiem jak to ma być zrobione dla podwójnego wskaźnika.

Podjąłem kilka prób, ale nie udało się

 

 

komentarz 1 lipca 2019 przez criss Mędrzec (172,570 p.)
Twoj kod nie zawiera funkcji 'init' ktorej dotyczy pytanie XD
komentarz 1 lipca 2019 przez aram100 Użytkownik (500 p.)
Bo tam oprócz ustawiania tytułu okna, wyłączenia wyświetlania kursora myszy itp. nic nie ma.

 

Chodzi mi o to, jak przekazać do funkcji wskaźnik SDL_Window *window (albo renderer) aby można go było wywołać w funkcji potrzebującej SDL_Window**, tak aby po wywowałniu ten obiekt nie był pusty

Udało mi się to zrobić w mainie, ale nie w innej funkcji. Być może źle deklaruję parametr albo coś
komentarz 3 lipca 2019 przez Patryk Kaczmarek Użytkownik (630 p.)

Nigdy nie pisałem w SDL ale wydaje się, że funkcja SDL_CreateWindowAndRender tworzy obiekty o które Ci chodzi, więc możesz spróbować coś takiego: 

void init(SDL_Window **window, SDL_Render **render) {
    SDL_CreateWindowAndRender(width, height, 0, window, render);
}

int main() 
{
    SDL_Window** = nullptr;
    SDL_Render** = nullptr;
    init(window, render);
}

 

 

komentarz 3 lipca 2019 przez j23 Mędrzec (195,220 p.)

Jeśli już, to:

SDL_Window* window = nullptr;
SDL_Render* render = nullptr;

init(&window, &render);

 

komentarz 3 lipca 2019 przez Patryk Kaczmarek Użytkownik (630 p.)
racja, za daleko poleciałem :P

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 2,932 wizyt
pytanie zadane 2 sierpnia 2016 w C i C++ przez Ditrix Mądrala (5,650 p.)
0 głosów
1 odpowiedź 879 wizyt
0 głosów
1 odpowiedź 686 wizyt
pytanie zadane 26 stycznia 2019 w C i C++ przez Pawli Początkujący (250 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...