objekte einer Klasse erstellen, und verwenden
-
SpielObberflaecheA.h wäre dann noch Interessant.
-
//--------------------------------------------------------------------------- #ifndef SpielOberflaecheAH #define SpielOberflaecheAH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Grids.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TLabel *Label1; TButton *btnRechts; TButton *btnRunter; TButton *btnDS; TStringGrid *FeldA; TButton *btnNeuesSpiel; TButton *btnSetzen; TButton *btnZeige; TTimer *Timer1; void __fastcall btnNeuesSpielClick(TObject *Sender); void __fastcall btnSetzenClick(TObject *Sender); void __fastcall Timer1Timer(TObject *Sender); void __fastcall btnZeigeClick(TObject *Sender); private: // Benutzer-Deklarationen int daten; int schiff; int spieler; int controller; public: // Benutzer-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifkurze frage am rand: welcher Befehl ist denn dafür zuständig, dass mein formulat (oberfläche TForm) erzeugt wird? oder gibts da gar keinen?
-
Wie ich vermutet habe: du definierst spiel im Konstruktor und versuchst, sie in den anderen Funktionen zu benutzen. Das geht nicht.
Barnibas schrieb:
ok, ich habe (teilweise) eine Lösung gefunden. wenn ich den "->" in
spiel->schiffBewegen(spieler);durch einen "." ersetze, funktioniert es in der ereignisroutine von btnNeuesSpiel,
Glaub ich nicht, jedenfalls nicht mit dem gezeigten Code.
-
manni66 schrieb:
Wie ich vermutet habe: du definierst spiel im Konstruktor und versuchst, sie in den anderen Funktionen zu benutzen. Das geht nicht.
wo muss ich spiel dann definieren?
manni66 schrieb:
Glaub ich nicht, jedenfalls nicht mit dem gezeigten Code.
die Zeile
spiel.schiffBewegen(spieler);liefert keine Fehlermeldung. ob sie wirklich funktioniert, weis ich nicht, weil ich keine oberfläche habe um es zu testen.
-
Geht das denn so?
//--------------------------------------------------------------------------- // "X" = Treffer // "O" = Daneben // "=" = Schiffe // " " = Wasser // ©Barnibas #include <vcl.h> #pragma hdrstop #include "SpielOberflaecheA.h" #include "KL_Spielsteuerung.h" #include "Kl_DatenModellController.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { FeldA->Rows[1]->Add("A"); //Koordinaten beschriften FeldA->Rows[2]->Add("B"); FeldA->Rows[3]->Add("C"); FeldA->Rows[4]->Add("D"); FeldA->Rows[5]->Add("E"); FeldA->Rows[6]->Add("F"); FeldA->Rows[7]->Add("G"); FeldA->Rows[8]->Add("H"); FeldA->Rows[9]->Add("I"); FeldA->Rows[10]->Add("J"); FeldA->Cols[1]->Add("1"); FeldA->Cols[2]->Add("2"); FeldA->Cols[3]->Add("3"); FeldA->Cols[4]->Add("4"); FeldA->Cols[5]->Add("5"); FeldA->Cols[6]->Add("6"); FeldA->Cols[7]->Add("7"); FeldA->Cols[8]->Add("8"); FeldA->Cols[9]->Add("9"); FeldA->Cols[10]->Add("10"); //*** FeldA->Cells[5][5]= "A"; //Test spiel(FeldA); } //--------------------------------------------------------------------------- void __fastcall TForm1::btnNeuesSpielClick(TObject *Sender) { int wx, wy; wx = 1; //Wasser X wy = 1; //Wasser Y for (wx = 1;wx < 11;wx++) { for (wy = 1; wy < 11; wy++) { FeldA->Cells[wx][wy]= " "; } } spieler = 0; for (schiff = 10; schiff > 0;schiff-- ) { spiel.schiffBewegen(spieler); } /* spieler = 1; for (schiff = 10; schiff > 0; schiff--) { spiel.schiffBewegen(spieler); }*/ } //--------------------------------------------------------------------------- void __fastcall TForm1::btnSetzenClick(TObject *Sender) { //spiel.setzeT4(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Label1->Caption = spieler; } //--------------------------------------------------------------------------- void __fastcall TForm1::btnZeigeClick(TObject *Sender) { //spiel.zeigeSpielfeld(spieler); } //---------------------------------------------------------------------------//--------------------------------------------------------------------------- #ifndef SpielOberflaecheAH #define SpielOberflaecheAH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Grids.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TLabel *Label1; TButton *btnRechts; TButton *btnRunter; TButton *btnDS; TStringGrid *FeldA; TButton *btnNeuesSpiel; TButton *btnSetzen; TButton *btnZeige; TTimer *Timer1; void __fastcall btnNeuesSpielClick(TObject *Sender); void __fastcall btnSetzenClick(TObject *Sender); void __fastcall Timer1Timer(TObject *Sender); void __fastcall btnZeigeClick(TObject *Sender); private: // Benutzer-Deklarationen int daten; int schiff; int spieler; int controller; SpielSteuerung spiel; public: // Benutzer-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifWeißt du was das macht?
spiel->schiffBewegen(spieler);Es ist eigentlich nichts anderes als:
(*spiel).schiffBewegen(spieler);
-
Pringles schrieb:
Weißt du was das macht?
spiel->schiffBewegen(spieler);Es ist eigentlich nichts anderes als:
(*spiel).schiffBewegen(spieler);habs versucht, kommt die exakt selbe Fehlermeldung!
-
[C++ Fehler] Unit1.cpp(61): E2451 Undefiniertes Symbol 'Spiel'Die Meldung bei den Code oben von mir?
-
Zu der Zeile:
SpielSteuerung spiel;kommen diese Fehlermeldungen:
*
[C++ Fehler] SpielOberflaecheA.h(34): E2303 Typname erwartet
[C++ Fehler] SpielOberflaecheA.h(34): E2139 In Deklaration fehlt ;
*zu dieser Zeile:
spiel(FeldA);diese Fehlermeldung:
*
[C++ Fehler] SpielOberflaecheA.cpp(44): E2268 Aufruf der undefinierten Funktion 'spiel'
*und zu der Zeile:
spiel.schiffBewegen(spieler);die Fehlermeldung:
*
[C++ Fehler] SpielOberflaecheA.cpp(61): E2451 Undefiniertes Symbol 'spiel'
*
-
Pringles schrieb:
[C++ Fehler] Unit1.cpp(61): E2451 Undefiniertes Symbol 'spiel'Die Meldung bei den Code oben von mir?
Die Kommt wenn ich diese Syntax verwende:
(*spiel).schiffBewegen(spieler);anstatt dieser:
spiel->schiffBewegen(spieler);
-
#include "Kl_Spielsteuerung.h"fehlt bei
SpielOberflaecheAH
-
#include "Kl_Spielsteuerung.h"fehlt bei
SpielOberflaecheAHDu kannst am besten alle include von SpielOberflaecheA.cpp in SpielOberflaecheA.h packen
-
Pringles schrieb:
#include "Kl_Spielsteuerung.h"fehlt bei
SpielOberflaecheAHDann sagt er mir:
*
[C++ Fehler] SpielOberflaecheA.cpp(20): E2279 Standardkonstruktor zur Initialisierung des Elements 'TForm1::spiel' nicht gefunden
*
-
//--------------------------------------------------------------------------- // "X" = Treffer // "O" = Daneben // "=" = Schiffe // " " = Wasser // ©Barnibas #include <vcl.h> #pragma hdrstop #include "SpielOberflaecheA.h" #include "KL_Spielsteuerung.h" #include "Kl_DatenModellController.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), spiel(FeldA) { FeldA->Rows[1]->Add("A"); //Koordinaten beschriften FeldA->Rows[2]->Add("B"); FeldA->Rows[3]->Add("C"); FeldA->Rows[4]->Add("D"); FeldA->Rows[5]->Add("E"); FeldA->Rows[6]->Add("F"); FeldA->Rows[7]->Add("G"); FeldA->Rows[8]->Add("H"); FeldA->Rows[9]->Add("I"); FeldA->Rows[10]->Add("J"); FeldA->Cols[1]->Add("1"); FeldA->Cols[2]->Add("2"); FeldA->Cols[3]->Add("3"); FeldA->Cols[4]->Add("4"); FeldA->Cols[5]->Add("5"); FeldA->Cols[6]->Add("6"); FeldA->Cols[7]->Add("7"); FeldA->Cols[8]->Add("8"); FeldA->Cols[9]->Add("9"); FeldA->Cols[10]->Add("10"); //*** FeldA->Cells[5][5]= "A"; //Test } //--------------------------------------------------------------------------- void __fastcall TForm1::btnNeuesSpielClick(TObject *Sender) { int wx, wy; wx = 1; //Wasser X wy = 1; //Wasser Y for (wx = 1;wx < 11;wx++) { for (wy = 1; wy < 11; wy++) { FeldA->Cells[wx][wy]= " "; } } spieler = 0; for (schiff = 10; schiff > 0;schiff-- ) { spiel.schiffBewegen(spieler); } /* spieler = 1; for (schiff = 10; schiff > 0; schiff--) { spiel.schiffBewegen(spieler); }*/ } //--------------------------------------------------------------------------- void __fastcall TForm1::btnSetzenClick(TObject *Sender) { //spiel.setzeT4(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Label1->Caption = spieler; } //--------------------------------------------------------------------------- void __fastcall TForm1::btnZeigeClick(TObject *Sender) { //spiel.zeigeSpielfeld(spieler); } //---------------------------------------------------------------------------So?
-
Pringles schrieb:
So?
dann kommen für
SpielSteuerung spiel;(in der .h)
die Fehlermeldungen
*
[C++ Fehler] SpielOberflaecheA.h(36): E2303 Typname erwartet
[C++ Fehler] SpielOberflaecheA.h(36): E2139 In Deklaration fehlt ;
*
-
Kl_Spielsteuerung.h ist auch in der SpielOberflaecheA.h inkludiert?
-
Pringles schrieb:
Kl_Spielsteuerung.h ist auch in der SpielOberflaecheA.h inkludiert?
ja, das sind alle includes aus Spieloberflaeche.h
#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Grids.hpp> #include "KL_Spielsteuerung.h" #include "Kl_DatenModellController.h"
-
Kannst du mal alles in ne zip oder rar packen und irgendwo hochladen. Würde das ganze um einiges einfacher machen.
-
klar...hier ist das ganze projekt (Turbo C++ 2006 von Borland)
ich hoffe, das klappt mit dem link...
-
Kann es leider nicht testen aber so solltes es gehen.
In der KL_SpielSteuerung.cpp: nur #include "KL_SpielSteuerung.h" includen.
Bei KL_SpielSteuerung.h alle includes durch diese ersetzen:#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Grids.hpp> #include "Tserial_event.h" #include "KL_DatenModellController.h" #include <vcl.h> #include "conio.h"Bei SpielOberflaecheA.cpp:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)zu:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), spiel(FeldA)und
spiel->memberfunktionenzu
spiel.memberfunktionenBei SpielOberflaecheA.h:
SpielSteuerung *spiel;zu:
SpielSteuerung spiel;
-
Pringles schrieb:
Kann es leider nicht testen aber so solltes es gehen.
Vielen Dank für deine Mühe, ich hoffe du saßt nicht die ganze Zeit nur daran

Ich hab die Änderungen mal kurz eingefügt und auf einmal kamen mehrere hundert Fehler, die vorher alle nicht waren. Als ich das ganze wieder raus gemacht hab, ist mir was eingefallen und wie sich herausgestellt hat, fehlte in der SpielOberflaeche.h einfach nur ein
class SpielSteuerung;über der Zeile
class TForm1 : public TForm { blabla }aber trotzdem vielen danke für deine Mithilfe!