objekte einer Klasse erstellen, und verwenden
-
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, aber nicht bei den anderen Aufrufen (btnSetze und btnZeige). Bei beiden funktioniert weder ein "." noch ein "->".
-
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;