Von einer Funktion auf eine andere zugreiffen?
-
Hallo!
Wir sollen ein Spiel (4 Gewinnt) Programmieren.
Hab dazu drei Funktionen deklariert.Die Funktion main, die die beiden anderen aufruft.
Dann eine Funktion "make_it".
Diese Funktion erzeugt das Spielfeld, und zeichnet die Kanten usw.int make_it() { typedef vector<string> Zeile; typedef vector<Zeile> Matrix; Matrix Feld(17, Zeile(15, " " )); // Vektorgröße wird festgelegt int SpaltenNr = 1; // Variable für die Nummerrierung der Spalten // Feld wird erstellt (Striche usw.) for (int a = 0; a < 17; a++) { for(int b = 0; b < 15; b++) { // Spielfeld wird "gezeichnet" } } return 0; }
Dann noch eine Funkton "draw_it". Diese Funktion soll den Vektor bzw. die Matrix ausgeben.
Sagt aber das die Variablen unbekannt sind. Auch wenn ich make_it.Variablenname schreibe meckert er.Was mache ich falsch??
int draw_it() { // Spielfeld ausgeben for (Matrix::iterator zeile=Feld.begin(); zeile!=Feld.end(); zeile++) { for (Zeile::iterator spalte=zeile->begin(); spalte!=zeile->end(); spalte++) { cout << *spalte; } cout << endl; } return 0; }
Danke schon mal für eure Hilfe!
Gruß
Christian
-
Woher kennt draw_it() zeile und spalte
mfg JJ
-
Die Funktion draw_it() kennt halt nicht die Variablen:
- Zeile
- Spalte
- Feld
- MatrixDass ist ja mein Problem.
Wie sage ich der Funktion draw_it() das die Variablen aus der Funktion make_it() gemeint sind??Gruß
Christian
-
Da globale Variablen keine gute Lösung sind musst du wohl oder übel beide
Variablen als Parameter übergeben. Da beide Funktionen auf die gleichen Daten
zugreifen sollen übergibst du sie am besten in beiden Funktionen als Parametermfg JJ
-
John Doe schrieb:
Da beide Funktionen auf die gleichen Daten
zugreifen sollen übergibst du sie am besten in beiden Funktionen als ParameterAm besten als konstante Referenz.
Gruss
-
Würdet ihr mir das bitte etwas genauer erklären??
Ich habe noch nicht soviel Ahnung.Wenn ich schreibe
return Feld;
kommt eine Fehlermeldung von G++ (error: cannot convert 'make_it()::Matrix' to 'int' in return)
Danke!
Gruß
Christian
-
Hi!
Hast du noch nie etwas von Parametern gehört?:
void meineFunktion(int param1, char* param2) { /* ... */ }
Code-Hacker
-
int draw_it(const vector<vector<string> >& Feld)
draw_it benötigt übrigens die gleichen typedefs wie make_it, wenn du schon 'Zeile' und 'Matrix' verwenden willst.
-
Danke Leute, aber irgendwie bin ich zu blöd dazu.
Ich poste euch hier mal den ganzen Code:
#include <iostream> #include <vector> using namespace std; // Spielfeld wird erstellt int make_it() { typedef vector<string> Zeile; typedef vector<Zeile> Matrix; Matrix Feld(17, Zeile(15, " " )); // Vektorgröße wird festgelegt int SpaltenNr = 1; // Variable für die Nummerrierung der Spalten // Feld wird erstellt (Striche usw.) for (int a = 0; a < 17; a++) { for(int b = 0; b < 15; b++) { // Spielfeld wird "gezeichnet" if (a%2 == 1 && b%2 == 0) { Feld.at(a).at(b)="|"; } if (a%2 == 0 && b%2 == 0) { Feld.at(a).at(b)="+"; } if (a%2 == 0 && b%2 == 1) { Feld.at(a).at(b)="---"; } if (a == 2 && b%2 == 1) { Feld.at(a).at(b)="==="; } if (a == 1 && b%2 == 1) { string temp; temp = temp + " " + char((SpaltenNr + 48)) + " "; Feld.at(a).at(b)= temp; SpaltenNr++; } } } return 0; } //---------------------------------------------------------------------------------------------------------------------------------------------------- // Spielfeld wird gezeichnet int draw_it() { // Spielfeld ausgeben for (Matrix::iterator Zeile=Feld.begin(); Zeile!=Feld.end(); Zeile++) { for (Zeile::iterator spalte=zeile->begin(); Spalte!=Zeile->end(); Spalte++) { cout << *Spalte; } cout << endl; } return 0; } //---------------------------------------------------------------------------------------------------------------------------------------------------- int main () { make_it(); draw_it(); }
Wo muss ich jetzt was ändern??