• 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

Object Storage Arubacloud
0 głosów
303 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,590 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 (194,920 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,400 wizyt
pytanie zadane 2 sierpnia 2016 w C i C++ przez Ditrix Mądrala (5,650 p.)
0 głosów
1 odpowiedź 572 wizyt
0 głosów
1 odpowiedź 460 wizyt
pytanie zadane 26 stycznia 2019 w C i C++ przez Pawli Początkujący (250 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...