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;
    //---------------------------------------------------------------------------
    #endif
    

    kurze 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; 
    //--------------------------------------------------------------------------- 
    #endif
    

    Weiß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

    SpielOberflaecheAH
    

    Du kannst am besten alle include von SpielOberflaecheA.cpp in SpielOberflaecheA.h packen



  • Pringles schrieb:

    #include "Kl_Spielsteuerung.h"
    

    fehlt bei

    SpielOberflaecheAH
    

    Dann 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...

    https://www.dropbox.com/s/mqkz69ri4ib4xsm/NeuerOrdner.rar



  • 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->memberfunktionen
    

    zu

    spiel.memberfunktionen
    

    Bei SpielOberflaecheA.h:

    SpielSteuerung *spiel;
    

    zu:

    SpielSteuerung spiel;
    

Anmelden zum Antworten