objekte einer Klasse erstellen, und verwenden



  • Pringles schrieb:

    Kannst du auch mal den Code zeigen wo du

    SpielSteuerung spiel(FeldA);
    

    stehen hast. Bis jetzt hast du ja nur die SpielSteuerung.cpp und .h gezeigt.

    auf der ersten seite war schonmal ein teil davon, aber hier is mal der komplette code von SpielObberflaecheA.cpp (Die datei, zu meiner oberfläche).

    //---------------------------------------------------------------------------
    //					"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)
    {
    SpielSteuerung 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);
    }
    //---------------------------------------------------------------------------
    


  • 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


Anmelden zum Antworten