Klassen Vereerben (auch ein Thread Klasse)
-
Hansmaker84 schrieb:
E2125 Compiler konnte Standardkonstruktor nicht für die Klasse 'RS232' generieren
in dieser fehlermeldung steht doch schon alles. deiner klasse test fehlt der standard-konstruktor.
class empfangen : public TThread { protected: void __fastcall Execute(); public: __fastcall empfangen(bool CreateSuspended); }; // abgeleitete Klasse class Test : public empfangen { public: void schreiben(); void empfangen(); // Standard-Konstruktor // -> std.-maessig ist der Thread suspended gestartet // -> wenn false dann halt nicht Test() : empfangen(true) {} // Konstruktor mit Parameter // -> kannste z.b. verwenden um das Erzeugen des Threads zu steuern // da dieser ja den Parameter erwartet Test(const bool CreateSuspended) : empfangen(CreateSuspended) {} };p.s. code-tags funzen nicht

-
@Sunday: Mach mal die Kursiv-Tags um das Wort suspended weg. Dann klappts auch mim Code-Tag.

Grüße Joe_M.
-
seltsam, hab das doch frueher schon kursiv und fett im code benutzt...

-
Danke,
diese Fehler ist jetzt auch behoben. Jetzt kommt aber schon der nächste Fehler und zwar in dieser Zeile:Klasse1.schreiben();Meldung:
[C++ Fehler] Unit1.cpp(26): E2294 Auf linker Seite der Struktur ist . oder .* erforderlichDiese habe ich behoben indem ich folgendes schrieb:
Klasse1.*schreiben();Jetzt lautet die Fehlermeldung:
[C++ Fehler] Unit1.cpp(26): E2268 Aufruf der undefinierten Funktion 'schreiben'Was mache ich jetzt falsch?
-
Klasse1->schreiben();
-
wenn du klassen dynamisch mit new erzeugst, musst du mit -> auf die funktionen und variablen der klasse zugreifen.
-
Vielendank!
Wo muss ich eigentlich eine Variable deklarienen die ich in beiden Klassen verwenden möchte, aber von außerhalb nicht sichtbar sein soll.
-
Hallo
Als protected von empfangen, dann kannst du sowohl von empfangen als auch von Test drauf zugreifen. Aber von außerhalb der Klassen nicht.
bis bald
akari
-
Ich kann zwar von beiden Klassen auf die Variable zugreifen.
Wenn ich aber bei empfangen die Variable auslese ist sie 0, zuvor habe ich Sie bei test auf 5 gesetzt.
void test::schreiben() { i = 5; empfangen *SecondProcess = new empfangen(false); SecondProcess->Priority = tpLower; // niedrigere Priorität setzen SecondProcess->Resume(); // Thread jetzt ausführen }Hier ist die Variable aber null:
void __fastcall empfangen::Execute() { i = 2; }
-
Hallo
Ich glaube du hast da das Konzept falsch verstanden.
Du willst mit schreiben() eine neue Thread-Instanz von Typ empfangen erzeugen und dieser Instanz noch eine zusätzliche Variable für deren Methode empfangen() (bemerkst du die Doppeldeutigkeit deiner Begriffe?) übergeben? Dann ist das von mir gesagte natürlich nicht ausreichend. Am besten übergibst du den Wert als zusätzlichen Wert des Parameters des Konstruktors von empfangen.
Übrigens scheint es ganz so, als ob die Thread-Instanz die du in empfangen erzeugst, niemals wieder gelöscht wird.bis bald
akari