vector einer Klasse nur lokal?
-
Hallo zusammen.
Habe eine Frage:ich habe eine Klasse
Spieler.h class Spieler{ int Spielernummer; . . .Und ich habe ein Formular Form1 mit einem Button1 und einem Edit1.
Sobald das Formular geöffnet wird, soll ein vector mit der Klasse "Spieler" angelegt werden(8 Mitspieler).Bei Druck auf den Button1 sollen die Daten vom Edit1-Feld in die jeweilige Mitspielerklasse übernommen werden
(der Einfachheit halber jetzt mal nur 1 Spieler!)Form1.cpp
void __fastcall TForm1::FormShow(TObject *Sender) { vector<Spieler> Mitspieler(1); } void __fastcall TForm1::Button1Click(TObject *Sender) { Mitspieler[1].Spielername=Edit1->Text; }Beim Compilieren bekomme ich folgende Fehlermeldung:
E2451 Undefiniertes Symbol 'Mitspieler'Wenn ich die Deklaration des vectors aber direkt zum Button1Click kopiere,
dann hab ich keine Fehlermeldung.Meine Vermutung: der vector ist nur lokal bekannt.
daher die Frage: wie kann ich den global bekannt machen? Oder gibts eine andere Lösung?
Stehe doch ziemlich auf dem Schlauch
-
Hallo,
Ja, in deiner Variante ist Mitspieler lokal für FormShow.
Deklariere die Variable als Member von TForm1 dann ist sie in allen Memberfunktione der Klasse sichtbar.
-
Jau, danke das geht.
Aber wie kriege ich sie dann für andere Units angesprochen?
-
Hallo
Siehe FAQ, Abschnitt Forms.
bis bald
akari
-
Braunstein schrieb:
Hallo,
Ja, in deiner Variante ist Mitspieler lokal für FormShow.
Deklariere die Variable als Member von TForm1 dann ist sie in allen Memberfunktione der Klasse sichtbar.Wie mache ich das mit der Member?
Habe die Deklaration direkt hinter die "include" Zeilen gesetzt.
Jetzt kann ich compilieren und die Funktionen sind ok, aber im anderen Form ist "Mitspieler" immer noch unbekannt!
-
Hallo
Öffne die Header-Datei des Forms und setzte die Deklaration der Variablen unter das public. Jetzt ist diese Variable in allen Units erreichbar die die Header des Forms included, über die Instanz des Forms.
Ich empfehle erstmal die Grundlagen von C++ zu lernen, insbesondere OOP bevor du dich mitkomplexen GUI-Frames beschäftigst.bis bald
akari
-
Geh in die Header-Datei deiner Form1 und schreibe die Deklaration unter public: .
Dann kannst von anderen Formularen mit Form1->Mitspieler zugreifen.
-
Ok,OK....
Also ich hab gedacht ich könnte es an einem einfachen Beispiel klären, aber es ist wohl komplizierter.Deshalb nun etwas ausführlicher:
Ich habe 2 Formulare "Hauptbildschirm" und "NeuesSpiel".
Zusätzlich habe ich noch 2 units "Spieler" und "Karte".Die units "Spieler" und "Karte" enthalten die Klasse "Spieler" bzw. "Karte" jeweils in den Headet-Dateien.
In den Formularen sind versch. Eingabefelder und Buttons, alles was man braucht um ein neues Spiel zu starten.....
Nun will ich im Formular "NeuesSpiel" beim drücken des Button1 einen vector der Klasse "Spieler" anlegen.
vector<Spieler> Mitspieler(8);Wenn ich diese Deklaration in "NeuesSpiel.cpp" direkt hinter die #include Zeilen setzte, kann ich kompilieren und es funktioniert soweit alles.
Ich kann aber im Formular "Hauptbildschirm" nicht auf Mitspieler.at(1) zugreifen, er sagt er kenne "Mitspieler" nicht.Wenn ich versuche die vector deklaration in die Header-Datei von "NeuesSpiel" also NeuesSpiel.h zu schreiben, dann meckert der Compiler "Undefiniertes Symbol 'Spieler'" und das, obwohl alle header-Dateien in allen units mit #include bekannt sind (gleiches gilt für <vector.h>)
Wahrscheinlich hab ich einen groben Denkfehler gemacht, aber leider komm ich nicht drauf.
Die Grundlagen von C++ hab ich schon intus (Form1->..... etc.)
Aber ich versuche mich zum ersten Mal mit einem vector....
-
Mit dem Quelltext deiner Header-Datei wo der Vector deklariert wird, wäre es einfacher...
Aber wenn du ihn im public-Teil deklarierst und in der Header-datei auch alle anderen Units includet sind, sollte es eigtl funktionieren...
-
Hallo
Die Grundlagen von C++ hab ich schon intus (Form1->..... etc.)
Deine Frage macht aber deutlich das du eben grade im Bereich OOP und Sichtbarkeit eben nicht die Grundlagen beherscht.
Aber ich versuche mich zum ersten Mal mit einem vector....
Das ist auch kein Problem mit vector, mit jedem andern Typ würde dir dasselbe passieren.
Wenn ich versuche die vector deklaration in die Header-Datei von "NeuesSpiel" also NeuesSpiel.h zu schreiben, dann meckert der Compiler "Undefiniertes Symbol 'Spieler'" und das, obwohl alle header-Dateien in allen units mit #include bekannt sind (gleiches gilt für <vector.h>)
Das liegt höchstwahrscheinlich daran das die Definition vom Type Spieler nicht an der Stelle bekannt ist wo der vector deklariert wird. Am besten lagerst du die die Definition von Spieler in eine eigene Unit aus
// Headerdatei "Spieler.h" ... class Spieler { }; ... // Headerdatei NeuesSpiel.h #include "Spieler.h" ... public : std::vector<Spieler> NeueSpieler; ... // Implementation Main.cpp #include "NeuesSpiel.h" ... NeuesSpiel->NeueSpieler.size() // Zugriff über das Form auf den vectorbis bald
akari
-
Danke erstmal für die Antworten.
Habe die Anweisung "#include "Spieler.h" in die "NeuesSpeil.h" eingesetzt, jetzt gehts. War vorher in "NeuesSpiel.cpp" drin!
Werde mich heute Abend nochmal durch die Bücher und Unterlagen zu OOP drucharbeiten....

-
Hallo,
Da gibt es auch entsprechende Tutorials im Netz.
z.Bsp.
http://www.ica1.uni-stuttgart.de/Courses_and_Lectures/C++/script/script.html
http://www.cpp-tutor.de/cpp/le09/le09_01.htm
http://tutorial.schornboeck.net/oop2.htm
etc.