Frage zu Instanzen
-
Hallo
ich habe eine allgemeine C++ Frage zu instanzen.
Ich habe eine CKlasse1 mit der Funktion(blabla closedevice()) diese Funktion beendet etwas.
Sobald diese Instantz von CKlasse1 läuft will ich aus CKlasse2 die Funktion(blabla closedevice()) von CKlasse1
Aufrufen, die muss sich aber auf die Aktuelle instantz beziehen da sonst closedevice() eine Fehler verursacht.Noch mal ganz kurz " Wie kann ich aus CKlasse2 eine Funktion von CKlasse1 Aufrufen die sich auf die Aktuelle
Instanz von CKlasse1 bezieht."
-
Hallo,
Du könntest eine Referenz auf die Instanz von CKlasse1 im Konstruktor von CKlasse2 übergeben und dort die Memberfunktion aufrufen oder an eine Membervariable binden.
-
Hast du da ein kurzes Beispiel, oder eine Dummy Klasse schnell schreiben ?
Gruß MacGyver
-
Hier mal ein Beispiel.
class CKlasse1 { public: closedevice() { // tu irgendwas } }; // Variante 1 class CKlasse2 { public: CKlasse2(const CKlasse1& k1) { k1.closedevice(); } }; //oder // Variante 2 class CKlasse2 { private: const CKlasse1& k1; public: CKlasse2(const CKlasse1& k1_) : k1(k1_) {} { } void call_ck1_funct() { k1.closedevice(); } }; // aufrufen CKlasse1 k1; CKlasse2 k2(k1); // bei Variante 1 wird direkt aufgerufen // bei Varianze 2 k2.call_ck1_funct();
-
Kleines Beispiel, wobei je nach Anforderung zwischen Übergabe per Referenz (In der Initialisierungsliste des Konstruktors zwingend zu setzen) und Übergabe per Zeiger (Nachträglich setzbar, NULL erlaubt) gewechselt werden sollte (Oder wenn man noch weiter geht ggf. auch Smartpointer...)...
class A { public: void foo() {} }; class B { private: A& aReference; public: B(A& reference) : aReference(reference) {} void foo() { aReference.foo(); } }; int main() { A a; B b(a); b.foo(); }cu André
-
Schade das Beispiel von Braunstein Funktioniert nicht
mein Code#ifndef KEYBOARDMANAGER_HPP_INCLUDED #define KEYBOARDMANAGER_HPP_INCLUDED # include "grafikmanager.hpp" class CKeyboardManager : public IEventReceiver { CKeyboardManager(const CGrafikManager& k1) { k1.CloseGrafikEngine(); } public: virtual bool OnEvent(const SEvent& event) { if (event.EventType == irr::EET_KEY_INPUT_EVENT&& event.KeyInput.PressedDown) { switch(event.KeyInput.Key) { case KEY_ESCAPE: { break; } return true; } } return false; } }; #endif // KEYBOARDMANAGER_HPP_INCLUDEDBekomme immer die meldung
Fehler: Die Übergabe von »const CGrafikManager« als »this«-Argument von »int CGrafikManager::CloseGrafikEngine()« streicht QualifiziererKann jemand helfen ?
Gruß MacGyver
-
Der Fehler kommt doch nicht vom gezeigten Code sondern eher vom Aufruf. Wie lautet denn der?
-
Ich behaupte, in
CKeyboardManager(const CGrafikManager& k1) { k1.CloseGrafikEngine(); }ist cGrafikManager::CloseGrafikEngine nicht-const.
-
Der Übergabeparameter beim Konstruktor sollte nicht konstant sein (oder aber alternativ die Methode als konstant deklariert werden).
Ich frage mich nur, warum ein KeyboardManager die Grafikengine schließt???