objekte einer Klasse erstellen, und verwenden



  • Ich würde dir ein gutes Grundbuch empfehlen:

    (1) du vermischst C und C++.
    (2) du weißt nicht was new macht, zumindest in C++ ;).
    (3) du nutzt keine Smartpointer.
    (4) du verwendest Zeiger, Stichwörter: call by reference, call by value, call by pointer



  • theconflict schrieb:

    Ich würde dir ein gutes Grundbuch empfehlen:

    Das Problem ist, ich sitz da schon ne weile dran und muss das am montag abgeben -.-

    theconflict schrieb:

    (1) du vermischst C und C++.
    (2) du weißt nicht was new macht, zumindest in C++ ;).
    (3) du nutzt keine Smartpointer.
    (4) du verwendest Zeiger, Stichwörter: call by reference, call by value, call by pointer

    ich mach alles genau so, wie ich es in der schule gelernt hab!



  • Barnibas schrieb:

    theconflict schrieb:

    (1) du vermischst C und C++.
    (2) du weißt nicht was new macht, zumindest in C++ ;).
    (3) du nutzt keine Smartpointer.
    (4) du verwendest Zeiger, Stichwörter: call by reference, call by value, call by pointer

    ich mach alles genau so, wie ich es in der schule gelernt hab!

    Ja, das ist scheinbar das Problem.



  • Nathan schrieb:

    Barnibas schrieb:

    theconflict schrieb:

    (1) du vermischst C und C++.
    (2) du weißt nicht was new macht, zumindest in C++ ;).
    (3) du nutzt keine Smartpointer.
    (4) du verwendest Zeiger, Stichwörter: call by reference, call by value, call by pointer

    ich mach alles genau so, wie ich es in der schule gelernt hab!

    Ja, das ist scheinbar das Problem.

    ich bin offen für alles, wenn ihr mir erklärt, wie ich es machen soll, mach ich es gerne so. ich sollte es halt nur verstehen, denn sonst kann ich das ganze schlecht präsentieren...



  • Barnibas schrieb:

    aber das löst nicht mein eigentliches Problem...hast du auch eine idee deswegen?

    Was ist denn dein Problem?
    Bekommst du immer noch den selbern Fehler wenn du das schreibst?

    SpielSteuerung spiel(FeldA);
    


  • Pringles schrieb:

    Was ist denn dein Problem?
    Bekommst du immer noch den selbern Fehler wenn du das schreibst?

    SpielSteuerung spiel(FeldA);
    

    ja tu ich!

    und inzwischen ist dazu gekommen, dass meine oberfläche verschwindet und ich keine ahnung hab, warum, da ich daran oder an der dazugehörigen .cpp/.h nichts verändert habe 😞



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



  • 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


Anmelden zum Antworten