Mehrdimensionales Array mit Strings
-
Moin,
ich möchte ein Feld machen, das 5*5 groß ist. In dem Array möchte ich diese Zeichen:
|und Zahlen speichern. Die Zahlen aber auch nur als String.
Ich habe erstmal ein Array gemacht, und dann wollte ich da Werte zu weisen. Aber ich bekomme da irgentwie zichtausende Fehlermeldungen (eigentlich sinds nur 58).#include <iostream> #include <string> using namespace std; string spieler1; string feld[5][5]; feld[0][1] = "|"; feld[0][3] = "|"; feld[1][0] = "|"; feld[1][1] = "|"; feld[1][2] = "|"; feld[1][3] = "|"; feld[1][4] = "|"; feld[2][1] = "|"; feld[2][3] = "|"; feld[3][0] = "|"; feld[3][1] = "|"; feld[3][2] = "|"; feld[3][3] = "|"; feld[3][4] = "|"; feld[4][1] = "|"; feld[4][3] = "|"; void setup(); void draw(); int main() { setup(); draw(); system("pause"); } void setup() { cout<<"Geben Sie den Namen von Spieler1 ein: "; cin >> spieler1; cin.clear(); cout<<"Geben Sie den Namen von Spieler2 ein: "; cin >> spieler2; } void draw() { cout << feld[0][0] << feld[1][0] << feld[2][0] << feld[3][0] << feld[4][0] << "\n"; cout << feld[0][1] << feld[1][1] << feld[2][1] << feld[3][1] << feld[4][1] << "\n"; cout << feld[0][2] << feld[1][2] << feld[2][2] << feld[3][2] << feld[4][2] << "\n"; cout << feld[0][3] << feld[1][3] << feld[2][3] << feld[3][3] << feld[4][3] << "\n"; cout << feld[0][4] << feld[1][4] << feld[2][4] << feld[3][4] << feld[4][4] << "\n"; }.
Die Fehler:1>------ Erstellen gestartet: Projekt: TicTacToe für arme, Konfiguration: Debug Win32 ------ 1>Kompilieren... 1>tictactoe.cpp 1>.\tictactoe.cpp(7) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. 1>.\tictactoe.cpp(7) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(7) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(7) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(8) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. 1>.\tictactoe.cpp(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(8) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(8) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [][3]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(10) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. 1>.\tictactoe.cpp(10) : error C2087: 'feld': Feldindex fehlt 1>.\tictactoe.cpp(10) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(10) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [1][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(11) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(11) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(11) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [1][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(12) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(12) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(12) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [1][2]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(13) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(13) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(13) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [1][3]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(14) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(14) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(14) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [1][4]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(16) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(16) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(16) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [2][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(17) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(17) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(17) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [2][3]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(19) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. 1>.\tictactoe.cpp(19) : error C2087: 'feld': Feldindex fehlt 1>.\tictactoe.cpp(19) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(19) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [3][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(20) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(20) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(20) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [3][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(21) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(21) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(21) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [3][2]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(22) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(22) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(22) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [3][3]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(23) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(23) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [3][4]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(25) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(25) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(25) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [4][1]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(26) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>.\tictactoe.cpp(26) : error C2369: 'feld': Neudefinition; unterschiedliche Feldindizes 1> .\tictactoe.cpp(6): Siehe Deklaration von 'feld' 1>.\tictactoe.cpp(26) : error C2440: 'Initialisierung': 'const char [2]' kann nicht in 'int [4][3]' konvertiert werden 1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 1>.\tictactoe.cpp(43) : error C2065: 'spieler2': nichtdeklarierter Bezeichner 1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Karl\Eigene Dateien\Visual Studio 2008\Projects\TicTacToe für arme\TicTacToe für arme\Debug\BuildLog.htm" gespeichert. 1>TicTacToe für arme - 53 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Ich hoffe ihr könnt mir helfen.
Philipp
-
Setz mal deine Zuweisungsorgie in die main().
Edit:
Oder mach besser eine Funktion, die das für dich macht, dann hast du nicht soviel Unnötiges in der main.
-
Verbesserungsvorschlag
- Vermeide globale Variablen, da "unschön". Den Spielzustand kann man in einem Objekt einer eigenen Klasse bzw Struktur speichern --> bissel bessere Kapselung.
- Mit geschachtelten For-Schleifen, kannst Du eleganter das Feld initialisieren bzw darstellen.
-
welcher Grund steckt dahinter, dass Zuweisungen im global-scope nicht möglich sind ?
-
danke für die Antworten, jetzt gehts.
Auch danke für den Verbesserungsvorschlag, aber ich kann immoment nur ein paar grundlagen in C++ und wollte mit dem Wissen mal einen kleinen Tictactoe basteln. Mit Classen und Strukturen beschäftige ich mich demnächst.Philipp
-
w h y schrieb:
welcher Grund steckt dahinter, dass Zuweisungen im global-scope nicht möglich sind ?
Wann sollen sie denn ausgeführt werden? Am Anfang der main? Was wenn es keine main gibt? In welcher Reihenfolge sollen unterschiedliche Übersetzungseinheiten behandelt werden?
Wenn du zufriedenstellende Antworten auf diese Fragen finden solltest, kannst du diese gerne dem C++-Standardisierungskommitee vorlegen.
-
Ein weiterer Vorschlag: Logik von der Ausgabe trennen.
Ein Quick'n'Dirty-Beispiel:
#include <iostream> using namespace std; void draw(const char board[9]); // Draws the board and its stored data. int main() { char data[] = { '.', '.', '.', 'x', 'o', '.', '.', '.', 'x' }; draw(data); } void draw(const char board[9]) { cout << "+---+---+---+\n"; for(int y = 0; y < 3; ++y) { cout << "| "; for(int x = 0; x < 3; ++x) { cout << board[x + y*3] << " | "; } cout << "\n+---+---+---+\n"; } }Grüße ...
Heiko