polkom21 Temat założony przez niniejszego użytkownika |
» 2013-01-06 21:17:58 Tak tak mam wyliczenie jaka duża jest tablica tylko, że jest problem z jej przekazaniem. mam wywołanie funkcji: DrawMap( window, map, rozmiarx, rozmiary ); i funkcja jak na razie nic nie wykonuje. void DrawMap( sf::RenderWindow & window, int ** map, int mapSizeX, int mapSizeY ) { } I cały czas ten sam błąd. Nie ma sensu tu wstawiać więcej kodu bo tylko z tym jest problem a zmienna map jest to tablica dwuwymiarowa przechowująca w pozycji OX, OY id grafiki która ma być wczytana w tym miejscu. |
|
Mrovqa |
» 2013-01-06 21:29:14 Nie zrozumiałeś mnie, daj kod, który wywołuje funkcje. Jakie to ma znaczenie? Jeśli to tablica statyczna to po prostu wcześniej trzeba zadeklarować te zmienne jako stałe lub użyć #define. A jeśli to tablica dynamiczna to tym bardziej muszą tu być jakieś zmienne bo inaczej nie miałoby to większego sensu. |
Po logu domyśliłem się, że to są stałe, równe 100. Jakie to ma znaczenie? Otóż wielkie - dynamicznie tak się nie alokuje tablic. |
|
RazzorFlame |
» 2013-01-06 21:34:35 Chyba lepiej zrobić to tak: void DrawMap( sf::RenderWindow _device, reszta argumentow ) { sf::RenderWindow * device = & _device; ... } |
|
Mrovqa |
» 2013-01-06 21:36:41 Chyba lepiej zrobić to tak:
void DrawMap( sf::RenderWindow & _device, reszta argumentow ) { sf::RenderWindow * device = & _device; ... }
|
Wiesz o tym, że _device to lokalna kopia, nieprawdaż? Chciałeś chyba użyć referencji (z resztą tak jak autor). |
|
polkom21 Temat założony przez niniejszego użytkownika |
» 2013-01-06 21:45:36 A poza tym z przekazywaniem okna jest wszystko ok. Mapa jest generowana przez taki skrypt: int rozmiarx, rozmiary; fstream plik; plik.open( "map/map.txt", ios::in ); plik >> rozmiarx >> rozmiary; int map[ rozmiarx ][ rozmiary ]; for( int x = 0; x < rozmiarx; x++ ) { for( int y = 0; y < rozmiary; y++ ) { plik >> map[ x ][ y ]; } } plik.close();
a wywoływana jest funkcja w głównej pętli gry DrawMap( window, map, rozmiarx, rozmiary ); a ta funkcja wygląda tak jak wcześniej podawałem. |
|
unimator |
» 2013-01-06 22:34:32 @Mrovqa Wiem, że to tablice statyczne są przekazywane w przykładzie. Chodziło mi o to, że lepiej jest tworzyć jakiekolwiek tablicę z pomocą stałych lub zmiennych (zależnie od tego jakie to tablice). @topic Rzeczywiście, dla tablicy statycznej funkcja powinna wyglądać trochę inaczej. Napisałem odpowiedni kod: #include <iostream> #include <cstdlib>
template < class typ > void FuncDynamic( typ ** tablica, unsigned sizeX, unsigned sizeY ) { std::cout << "Funkcja wywolana dla tablicy o rozmiarze " << sizeX << " " << sizeY << ".\n"; }
template < class typ > void FuncStatic( typ tablica[][ 100 ], unsigned sizeX, unsigned sizeY ) { std::cout << "Funkcja wywolana dla tablicy o rozmiarze " << sizeX << " " << sizeY << ".\n"; }
int main( int argc, char ** argv ) { char ** tablica_dynamiczna; int tablica_statyczna[ 100 ][ 100 ]; int sizeX, sizeY; sizeX = 5; sizeY = 15; tablica_dynamiczna = new char *[ sizeX ]; for( unsigned i = 0; i < sizeX; ++i ) { tablica_dynamiczna[ i ] = new char[ sizeY ]; } FuncDynamic < char >( tablica_dynamiczna, sizeX, sizeY ); FuncStatic < int >( tablica_statyczna, 100, 100 ); for( unsigned i = 0; i < sizeX; ++i ) { delete[] tablica_dynamiczna[ i ]; } delete[] tablica_dynamiczna; system( "PAUSE" ); return 0; }
Przerób sobie to na funkcję, której potrzebujesz i będzie działać jak trzeba. BTW, jeśli znasz wskaźniki i rozumiesz jak działa alokacja pamięci dla tablic z ich pomocą to szczerze polecam przerzucenie się na nie. Jak widać w wywołaniu funkcji dla tablicy dynamicznej potrzebujemy jedynie znać liczbę wymiarów i rozmiar tablicy. Dla tablicy statycznej funkcja musi mieć ustalony rozmiar tego obiektu, jaki może przyjąć (z wyjątkiem pierwszego wymiaru). Czyli jeśli musiałbyś np. obsłużyć mapy o różnych wymiarach to potrzebowałbyś do tego kilku funkcji (chyba, że zmieniałby się tylko pierwszy wymiar). |
|
Mrovqa |
» 2013-01-06 22:44:59 plik.open( "map/map.txt", ios::in ); plik >> rozmiarx >> rozmiary; int map[ rozmiarx ][ rozmiary ]; To co wspominałem - nie możesz tak tworzyć tablicy - musisz ją dynamicznie zaalokować. @Mrovqa Wiem, że to tablice statyczne są przekazywane w przykładzie. Chodziło mi o to, że lepiej jest tworzyć jakiekolwiek tablicę z pomocą stałych lub zmiennych (zależnie od tego jakie to tablice). |
No wiem, ale po co to pisałeś? Zzyżbym stwierdził gdzieś inaczej? |
|
polkom21 Temat założony przez niniejszego użytkownika |
» 2013-01-06 23:01:04 Dobra. Na razie działa :) Taki mały błąd a tak wiele szkód narobił. Dzięki bardzo za pomoc :) |
|
1 « 2 » |