| Autor |
Nachricht |
Neuling21
Unregistrierter
|
Neuling21 Unregistrierter
21:31:43 05.04.2012 Titel: |
Array deklarieren ! Compiler-Fehler |
Zitieren |
Hallo,
wieso kann ich eigentlich ein array nicht in einer if abfrage deklarieren ich versteh das nicht guckt euch mal meinen quelltext an:
die initialisierung des arrays stimmt habs hier aber mal mit ... abgekürzt
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<stdio.h>
#include<stdlib.h>
int main ( )
{
int level = 1;
if(level==1)
{
char feld[4][4]={{'a'..........},
..... | |
ich erhalte immer den fehler :
"Undeclared identifier 'feld'" wenn ich es später benutze !
unzwar möchte ich je nach eingabe mein array anders haben also wieso funktioniert das nicht ? |
|
|
|
 |
icarus2
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.09.2009
Beiträge: 1359
|
icarus2 Mitglied
21:34:04 05.04.2012 Titel: |
|
Zitieren |
Das Array ist nur innerhalb des Blocks sichtbar, in dem es deklariert wird. Genauso wie wenn du folgendes hast:
| C++: | if ( something )
{
int i = 3;
}
// Hier ist i nicht mehr sichtbar | |
*Edit
Zur Loesung: Das heisst du deklarierst das Array vor den if-Statements und initialisierst es dann in den if-Statements. |
Zuletzt bearbeitet von icarus2 am 21:34:56 05.04.2012, insgesamt 2-mal bearbeitet |
|
 |
Neuling21
Unregistrierter
|
Neuling21 Unregistrierter
21:36:49 05.04.2012 Titel: |
|
Zitieren |
aha und so ist es dann möglich ? also ich kann ja in der ifabfrage dem array einen wert geben oder ?
char[9][9];
int level=1;
if level ==1)
{
feld[9][9]={.........}
} |
|
|
|
 |
DirkB
Unregistrierter
|
DirkB Unregistrierter
21:41:36 05.04.2012 Titel: |
|
Zitieren |
Nein!
Mit feld{9]{9] ist ein Element gemeint. Da die Indizes bei dir aber nur von 0 bis 8 gehen, existiert das noch nicht einmal. |
|
|
|
 |
Wutz
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2696
|
Wutz Mitglied
21:42:03 05.04.2012 Titel: |
|
Zitieren |
Nein.
Initialisieren mit {} kannst du nur (einmal) bei der Definition.
Du kannst aber explizite Füllaktionen benutzen,
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | char a[4][4]={0}; /* alles 0 */
if( i==1 )
{
a[0][0]=1;
...
}
else
if( i==2 )
{
a[0][0]=2;
...
}
usw. | | |
_________________ Java, the best argument for Smalltalk since C++. -- Frank Winkler
|
|
 |
neuling21
Unregistrierter
|
neuling21 Unregistrierter
21:47:44 05.04.2012 Titel: |
|
Zitieren |
also konkret geht es um ein sudoku spiel und der spiler soll wählen können welche schwierigkeitsstufe er möchte und jenachdem was er wählt bekommt er ein anderes vorgegebenes! feld
also reicht es mir nicht nur einzelne werte zu ändern kann ich den spieler nicht irgentwie entscheiden lassen welches feld er verwendet ? |
|
|
|
 |
DirkB
Unregistrierter
|
DirkB Unregistrierter
21:55:27 05.04.2012 Titel: |
|
Zitieren |
Wie viele Spielfelder willst du da denn ablegen?
Du musst die per Zufall generieren und dann (je nach Schwierigkeit) mehr oder weniger Felder löschen. (aber in einer Kopie, das Ergebnis brauchst du noch) |
|
|
|
 |
neuling21
Unregistrierter
|
neuling21 Unregistrierter
21:59:24 05.04.2012 Titel: |
|
Zitieren |
ich wollte 3 felder vorgeben halt leicht-mittel-schwer
das muss doch irgendwie funktionierenn oder O.o : ) |
|
|
|
 |
seldon
Unregistrierter
|
seldon Unregistrierter
23:08:53 05.04.2012 Titel: |
|
Zitieren |
Eine Möglichkeit ist ein Zeiger auf Array:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 | char feld_leicht[4][4] = { ... };
char feld_mittel[4][4] = { ... };
char feld_schwer[4][4] = { ... };
char (*feld)[4];
if(leicht) {
feld = feld_leicht;
} else if(mittel) {
feld = feld_mittel;
} else {
feld = feld_schwer;
} | |
Auch möglich ist natürlich, aus mehreren Vorlagen nach Bedarf zu kopieren:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 | char feld_leicht[4][4] = { ... };
char feld_mittel[4][4] = { ... };
char feld_schwer[4][4] = { ... };
char feld[4][4];
if(leicht) {
memcpy(feld, feld_leicht, sizeof(feld));
} else if(mittel) {
memcpy(feld, feld_mittel, sizeof(feld));
} else {
memcpy(feld, feld_schwer, sizeof(feld));
} | |
Ebenfalls denkbar wäre ein Array von Feldern:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 | enum { LEICHT, MITTEL, SCHWER };
char feld[3][4][4] = {
{ { leichtes feld hier } },
{ { mittleres feld hier } },
{ { schweres feld hier } }
};
int level = MITTEL;
/* Dann später statt feld[x][y] */
feld[level][x][y]; | |
Es gibt da eine ganze Reihe von Möglichkeiten. Such bzw. denk dir eine aus. |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|