Tablica[ZMIENNA][ZMIENNA] |
Autor |
Wiadomość |
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 30-05-2011, 19:42 Tablica[ZMIENNA][ZMIENNA]
|
|
|
Natknąłem się na malutki problemik. Mam już napisaną całą grę w kółko i krzyżyk. Wykonałem (bardzo trudne wg. tutoriala) ćwiczenie, żeby móc zmienić rozmiar planszy za pomocą stałej w pliku nagłówkowym.
Teraz chciałbym zrobić tak, żeby użytkownik sam na początku ustalał ten rozmiar. I tu pojawia się problem. Rozmiar jest stałą. Zapytacie - to co za problem zrobić z niego zwykłą zmienną? Otóż taki problem, że ta zmienna jest potrzebna do ustalenia rozmiaru tablicy dwuwymiarowej, a rozmiar tablicy musi być... stały.
Prościej:
Na początku programu chce się spytać o rozmiar planszy do gry. Musi to być zmienna.
cin wywala błąd, bo rozmiar planszy jest stałą.
Robię z tej stałej zmienną.
PewnaTablica[RozmiarPlanszy][RozmiarPlanszy] <- błąd! Rozmiar tablicy musi być stałą!
I co ja mam zrobić z tym, zdaje mi się nierozwiązywalnym, problemem? Może to dla was błahe, ale ja się uczę jeszcze |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
Raptor
Clever Girl
Twoja ulubiona misja: Raptorowanie
Pomógł: 4 razy Wiek: 24 Dołączył: 26 Cze 2010 Posty: 432 Skąd: Isla Nublar
|
Wysłany: 30-05-2011, 21:14 Re: Tablica[ZMIENNA][ZMIENNA]
|
|
|
Simbax napisał/a: | Może to dla was błahe, ale ja się uczę jeszcze |
Dla mnie nie jest to wcale błahe. I tak jesteś na bardziej zaawansowanym poziomie, niż ja... |
_________________ - Stężenie czekolady we krwi: 93‰
- Ja to bym zjadł jeszcze batona...
|
|
|
|
|
krzys_h
Twoja ulubiona misja: Wszystkie :)
Pomógł: 3 razy Wiek: 20 Dołączył: 12 Gru 2010 Posty: 255 Skąd: Łódź
|
Wysłany: 30-05-2011, 21:14
|
|
|
Polecam lekturę dotyczącą dynamicznej allokacji pamięci. W wolnej chwili może dam jakiś przykładzik. |
_________________ Gość, cieszysz się, że skontaktowaliśmy się z EPSITEC? |
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 30-05-2011, 21:54
|
|
|
To ma związek ze wskaźnikami? Jeszcze daleka droga zanim dojdę do rozdziału o nich... Cóż... Będę wdzięczny za przykład. |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 30-05-2011, 22:37
|
|
|
Kod: | int width, height;
puts("Podaj szerokosc i wysokosc oddzielone spacja.");
scanf("%i %i", &width, &height);
T* tab = (T*)malloc(sizeof(T)*width*height);
#define tab2d(x, y) (tab[(x)+(y)*width])
|
Pod T podstawiamy typ tablicy.
Użycie:
Kod: |
tab2d(0, 0) = jakas_zmienna;
if (tab2d(666, 1337) == jakas_inna_zmienna) poraz_uzytkownika_pradem();
|
Oczywiście można to zrobić lepiej na klasach. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 31-05-2011, 16:59
|
|
|
ERROR '(typ ENUM)' does not define this operator or a conversion to a type acceptable to the predefined operator
Chyba sobie podziękuje. Taka drobna modyfikacja, a tyle problemów... |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 31-05-2011, 18:22
|
|
|
Simbax napisał/a: | ERROR '(typ ENUM)' does not define this operator or a conversion to a type acceptable to the predefined operator | Nie podałeś w której linii. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 31-05-2011, 19:41
|
|
|
W takiej, w której chcę użyć tablicy ;P
(pętle for)
g_aPlansza[i][j] = FLD_EMPTY; //błąd.
W dodatku podkreśla drugi nawias kwadratowy "No operator "[]" matches these operands". I taki błąd jest jeszcze w kilkunastu innych linijkach, w których używam tablicy.
Myślałem, że dałoby radę zrobić tak, żebym nie musiał zmieniać reszty kodu. Zresztą użycie tablica(x, y) też wywołuje błąd w kompilacji
Więc jak użyć tej tablicy w linijce takiej jak ta:
Kod: | if (g_aPlansza[uY][uX] == FLD_EMPTY) g_aPlansza[uY][uX] = static_cast<FIELD>(g_AktualnyGracz); |
Po zmianie nadal jest błąd:
Kod: | if (g_aPlansza(uY, uX) == FLD_EMPTY) g_aPlansza(uY, uX) = static_cast<FIELD>(g_AktualnyGracz); |
A najlepiej to daje kod źródłowy, bo już nie wyrabiam z tym...
http://dl.dropbox.com/u/16682532/CrossCircle.zip |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 31-05-2011, 20:20
|
|
|
Simbax napisał/a: | bo już nie wyrabiam z tym | A w Minecrafcie wychodzi Ci wszystko od razu? Nie poddawaj się. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 31-05-2011, 20:49
|
|
|
Kod: | srand(time(NULL));
int x = rand()%5+1;
int y = rand()%5+1;
Label1->Caption = x;
Label2->Caption = y;
AnsiString **w;
*w = new (AnsiString*)[y];
for(int i = 0; i < y; i++) w[i] = new AnsiString[x];
int a, b;
for(a = 0; a < y; a++) for(b = 0; b < x; b++) w[a][b] = "LOL "; |
C++ Builder mi kompiluje, zamiast AnsiString wpisz sobie inny typ.
Swoja droga dziwny problem, pamietam, ze Dev-Cpp kompilowal mi zwykle tablice ze zmiennym rozmiarem bez problemu, tylko nie mozna bylo przy deklaracji odrazu nadawac wartosci. |
_________________
|
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 31-05-2011, 21:19
|
|
|
Ech. Na razie daje sobie z tym spokój. Potrzebuję większej wiedzy żeby to wszystko ogarnąć.
adiblol napisał/a: | Oczywiście można to zrobić lepiej na klasach. |
A więc lecę się dalej uczyć. |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
konrad-fligier@wp.pl
Gość
|
Wysłany: 17-06-2011, 23:47
|
|
|
(też robiłem kółko i krzyżyk - sam)
A tak trochę inaczej.
Mi działa takie coś:
Kod: |
const int zmienna=10;
tab[zmienna+2][zmienna+1];
|
(Potrzebowałem takie coś w jednym programie)
Wiec czy zadziała to coś:
Kod: |
const int zmienna=0;
int a;
cin>>a;
tab[zmienna+a];
|
|
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 18-06-2011, 01:50
|
|
|
Nie zadziala. |
_________________
|
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 18-06-2011, 14:50
|
|
|
Simbax napisał/a: | PewnaTablica[RozmiarPlanszy][RozmiarPlanszy] <- błąd! Rozmiar tablicy musi być stałą! |
A do stałej nie można zapisywać. No chyba że się uprzesz i użyjesz wskaźników ale wtedy cuda się będą działy... |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 18-06-2011, 14:59
|
|
|
Dałoby się wykorzystać dynamiczne tablice? Kiedyś takiego czegoś użyłem, tylko nie pamiętam w jakim celu. I jak Właściwie to w ogóle nie rozumiałem jak tamten kod działał, ale dobra... |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
|