objekte einer Klasse erstellen, und verwenden
-
theconflict schrieb:
Ist SpielSteuerung nicht definiert ? ( include vergessen ).
ja ist sie:
#include <vcl.h> #pragma hdrstop #include "Unit1.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; spiel = new SpielSteuerung(FeldA); }Kellerautomat schrieb:
warum new?
so wurde es uns beigebracht....wie sonst?
-
Ohne new, das ist nicht Java.
SpielSteuerung spiel(FeldA);
-
Nathan schrieb:
Ohne new, das ist nicht Java.
SpielSteuerung spiel(FeldA);seh ich das richtig, dass dann die Zeile:
SpielSteuerung *spiel;entfällt?
Wenn ich es so mache, verschwindet auch die Warnung...
-
Ja, und auch etwaige deletes (die du aber vermutlich eh nciht hast, da dein Lehrer denkt das wäre Java).
-
Nathan schrieb:
Ja, und auch etwaige deletes (die du aber vermutlich eh nciht hast, da dein Lehrer denkt das wäre Java).
ok, danke .. ich kenn mich leider kaum mit dem ganzen hier aus

aber das löst nicht mein eigentliches Problem...hast du auch eine idee deswegen?
-
Nathan schrieb:
Ja, und auch etwaige deletes (die du aber vermutlich eh nciht hast, da dein Lehrer denkt das wäre Java).
ok, danke .. ich kenn mich leider kaum mit dem ganzen hier aus

aber das löst nicht mein eigentliches Problem...hast du auch eine idee deswegen?
-
Da du nur Codeschnipsel zeigst, geraten:
Du definierst die Variable in einer Funktion und versuchst sie in einer Anderen zu benutzen. Das geht natürlich nicht. Möglicherweise brauchst du hier eine Membervariable.
-
manni66 schrieb:
Da du nur Codeschnipsel zeigst, geraten:
das oben ist der ganze code, bis die ereignisroutinen der einzelnen elemente auf der GUI anfangen, oder meint ihr den code der klasse?
Du definierst die Variable in einer Funktion und versuchst sie in einer Anderen zu benutzen. Das geht natürlich nicht. Möglicherweise brauchst du hier eine Membervariable.
spiel soll keine variable, sondern ein objekt der klasse SpielSteuerung sein...
-
Barnibas schrieb:
Du definierst die Variable in einer Funktion und versuchst sie in einer Anderen zu benutzen. Das geht natürlich nicht. Möglicherweise brauchst du hier eine Membervariable.
spiel soll keine variable, sondern ein objekt der klasse SpielSteuerung sein...
Das ist eine Variable.
Zeig mal KL_Spielsteuerung.h.
-
#ifndef Kl_Spielsteuerung_h #define Kl_Spielsteuerung_h //SpielSteuerung //--------------------------------------------------------------------------- // controller = 0 -> Nichts // controller = 1 -> Bewegen // controller = 2 -> LCD aktualisieren //--------------------------------------------------------------------------- #include "SpielOberflaecheA.h" #include "Tserial_event.h" class SpielSteuerung { private: bool t4; int error; TStringGrid *FeldA; Tserial_event *com; public: SpielSteuerung(TStringGrid *pFeldA); void schiffBewegen(int spieler); void zeigeSpielfeld(spieler); void schiffNachRechts(int x, int spieler); void schiffNachUnten(int y, int spieler); void schiffDrehen(int spieler); //welchesSchiff(int schiff) void setzeDaten(int schiff); void kursorRechts(int spieler); void kursorRunter(int spieler); void schiessen(int spieler); void setzeT4(); void OnDataArrival(int size, char *buffer); void SerialEventManager(uint32 object, uint32 event); int controller; }; #endif
-
jetzt bin ich total verwirrt! ich arbeite währenddessen weiter, und verwende ein weiteres objekt. das wird im constructor der klasse SpielSteuerung erzeugt:
com = new Tserial_event();(die andere definition führt immer wieder zu Fehlermeldungen).
In die Header-Datei hab ich es auch geschrieben, und zwar als private:
Tserial_event *com;wenn ich jetzt versuche in einer methode der klasse SpielSteuerung darauf zu zu greifen, geht das hier:
com->setManager(this); error = com->connect("COM6", 9600, SERIAL_PARITY_NONE, 8, false);aber hier nicht:
size = com->getDataInSize();[C++ Fehler] KL_SpielSteuerung.cpp(153): E2451 Undefiniertes Symbol 'com'
*
-
Du brauchst keine Hilfe sondern ein gutes C++ Buch.
Wie sollen wir dir helfen, ohne das du uns in deinen Code schauen lässt. Die definitionen in der Headerfile sagen uns nicht viel aus, oder meinst du nicht?
Viel wichtiger ist die implementierung deiner Funktionen in der Cpp-Datei. Wenn dich nächstes mal jemand bittet deine Klasse zu zeigen, bette bitte Header- und Sourcefile.
-
//SpielSteuerung //--------------------------------------------------------------------------- // controller = 0 -> Nichts // controller = 1 -> Bewegen // controller = 2 -> LCD aktualisieren //--------------------------------------------------------------------------- #include "KL_SpielSteuerung.h" #include "KL_DatenModellController.h" DatenModellController *DatenA; SpielSteuerung::SpielSteuerung(TStringGrid *pFeldA){ FeldA = pFeldA; controller = 0; DatenA = new DatenModellController(); //Kommunikation com = new Tserial_event(); if (com!=0) { com->setManager(this); error = com->connect("COM6", 9600, SERIAL_PARITY_NONE, 8, false); } } void SpielSteuerung::schiffBewegen(int spieler){ // controller = 1; senden /* while (T4 != true){ if (T1 == true){ schiffNachRechts(x, spieler); } if (T2 == true){ schiffNachUnten(y, spieler); } if (T3 == true){ schiffDrehen(spieler); } } T4 = false; controller = 0; */ } void SpielSteuerung::zeigeSpielfeld(int spieler){ int x, y; x = 0; y = 0; if (spieler == 1){ while (x < 10){ while (y < 10){ FeldA->Cells[x][y]= DatenA->leseFeld(x, y); } } } } void SpielSteuerung::schiffNachRechts(int x, int spieler){ /*daten = 1; welchesSchiff(schiff); if ((x + 1 + breite) >= 10){ x = x + 1; } else{ x = 0; }*/ } void SpielSteuerung::schiffNachUnten(int y, int spieler){ /*daten = 2; welchesSchiff(schiff); if ((y + 1 + hoehe) >= 10){ y = y + 1; } else{ y = 0; }*/ } void SpielSteuerung::schiffDrehen(void){ drehen(breite, hoehe); } void SpielSteuerung::setzeDaten(int schiff){ if (spieler == 0){ xx = x; yy = y; while (xx = x + breite){ spielFeldA[xx][y] = "B"; xx = xx +1; } while (yy = y + hoehe){ spielFeldA[x][yy] = "B"; yy = yy + 1; } spielFeldAusgebenA(); } else{ xx = x; yy = y; while (xx = x + breite){ spielFeldB[xx][y] = "B"; xx = xx +1; } while (yy = y + hoehe){ spielFeldB[x][yy] = "B"; yy = yy + 1; } spielFeldAusgebenB(); } } */ void SpielSteuerung::setzeT4(){ t4 = true; } void SpielSteuerung::OnDataArrival(int size, char *buffer){ if ((size>0) && (buffer!=0)) { buffer[size] = 0; //byte val = byte(buffer[0]); } } void SpielSteuerung::SerialEventManager(uint32 event){ char *buffer; int size; switch(event) { case SERIAL_CONNECTED : printf("Connected ! \n"); break; case SERIAL_DISCONNECTED : printf("Disonnected ! \n"); break; case SERIAL_DATA_SENT : printf("Data sent ! \n"); break; case SERIAL_RING : printf("DRING ! \n"); break; case SERIAL_CD_ON : printf("Carrier Detected ! \n"); break; case SERIAL_CD_OFF : printf("No more carrier ! \n"); break; case SERIAL_DATA_ARRIVAL : size = com->getDataInSize(); buffer = com->getDataInBuffer(); OnDataArrival(size, buffer); com->dataHasBeenRead(); break; } }das ist die .cpp
-
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 pointerich 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 pointerich 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 pointerich 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.