Problem mit initialisierung von lokaler Variable



  • 7xCore schrieb:

    Hört sich alles besser an was ich so vorhatte.

    Ich hab jetzt ein bisschen "rumprobiert" und hab jetzt

    Device* create_pDevice(Device*);
    

    Ist natürlich klar das das nicht geht , aber es ist näher als vorher, hoffe ich doch.

    Jetzt kann ich schon mal

    Device* dev = dev->create_pDevice(dev);
    

    besser verstehen.

    In der letzten Anweisung sind mit Sicherheit einige Erwähnungen von "dev" zu viel. Und die Art, wie du mit Parametern umgehst, ist auch nicht im Sinne des Erfinders.

    (Zu der eig. normalen initialisierung von der klassen instanz ... ich finde klasse* pointer sieht nicht so langweilig wie klasse.instanz aus 😋 was in endeffekt ja egal ist)

    Also ich habe lieber eine "langweilige", aber dafür korrekte Lösung als etwas instabil zusammengezimmertes.



  • Ahh schön das ihr noch alles was gepostet habt.
    Ich bin nun so weit gekommen das ich die warnings umgehen konnte.
    Da hat er mir dann gesagt das die funktion einen return wert braucht.
    Irgendwie hab ich dann mal so das am ende rausgebracht :

    Device.h

    Device* create_pDevice();
    

    Device.cpp

    Device* create_pDevice(Device* pCCEDevice){
    	return pCCEDevice;
    }
    

    devicetest.cpp

    Device* dev = dev->create_pDevice();
    

    scheint ohne warnings oder fehler im debugmodus zu funktionieren 😕



  • Wie ich gerade merke hat es doch nicht funktioniert , was es ja garnicht kann.
    Ich habe nur vergessen die /**/ in Device.h zu entfernen.

    Nunja ich werde mal weiter probieren und wenn nicht , oder bis da hin werde ich einfach

    Device* device = 0;
    

    und den error test deaktivieren



  • Was zur Hölle veranstaltest du da?

    Dein Compiler beschwert sich berechtigterweise, dass du eine uninitialisierte Variable benutzt, und du baust Hacks um die Warnung zu unterdrücken.



  • 1.Ich hab nun einfach dein

    Device
    
    virtual CCEDevice::Device* getDevice() = 0;
    

    hinzugefüg sodass ich nun

    Device* lala = lala->getDevice();
    

    machen kann wobei das selbe wie davor rauskommt.
    Also bin ich wieder am Anfang :|

    und du baust Hacks um die Warnung zu unterdrücken.

    meinst du brauchst oder baust ? und erläutere das bitte näher



  • Device* lala = lala->getDevice();

    Herrje, ist es denn so schwer zu verstehen? Um lala zu inititialisieren willst du lala dereferenzieren (ding ding ding ding *alarm* *alarm* ding ding ding) und getDevice aufrufen. Klingeln da nicht alle Alarmglocken bei dir?



  • Vielleicht solltest du mal ein einführendes C++ Buch lesen.



  • Initialisiere einfach dein Device und gut !

    Ob es jetzt ein

    Device* dev = new Device;
    

    oder ein

    Device* dev = 0;
    

    oder am Besten

    Device* dev = CreateDevice(); // CreateDevice ist eine Funktion, die dein Device erzeugt und initialisiert.
    

    ist schnuppe (für den Compiler natürlich nur), danach ist die Warnung weg.



  • Wie schon erwähnt: Wenns nicht nötig ist dein Objekt mit new zu erzeugen, erzeuge es als automatische Variable!



  • manni66 schrieb:

    Vielleicht solltest du mal ein einführendes C++ Buch lesen.

    👍

    Dir scheint grundlegendstes Wissen zu fehlen, so kommst du nicht weit.



  • Device* lala = lala->getDevice();

    Herrje, ist es denn so schwer zu verstehen? Um lala zu inititialisieren willst du lala dereferenzieren (ding ding ding ding *alarm* *alarm* ding ding ding) und getDevice aufrufen. Klingeln da nicht alle Alarmglocken bei dir?

    Nein sorry.Ich weiß nicht genau was du damit meinst "dereferenzieren"

    Der rest mit

    dev = 0 , new Device ... geht ja auch alles aber was ich gerne wissen würde , wenn ich den Device durch eine funktion so wie getDevice(),createDevice()... was auch immer wie eben diese funktion getDevice aussieht

    Hier z.B.

    Device* dev = CreateDevice();
    

    Was enthält nun diese funktion ?



  • Was enthält nun diese funktion ?

    Du wirst doch irgendeine Schnittstelle nutzen, die dir dein Device erzeugt? Benutz die.

    Oder ist Device etwa von dir geschrieben?



  • Device hab ich selbst geschrieben , deswegen auch die frage



  • dann musst du wissen, wie du dein Device erzeugen kannst.

    Lern bitte erstmal C++.



  • Dann ist dein ganzes Vorhaben schwachsinnig. 😉

    Erstell dev einfach auf dem Stack, oder bei dynamischer Lebenszeit auf dem Heap.



  • Ja eigentlich passt es mit

    Device dev = new Device;
    


  • 7xCore schrieb:

    Ja eigentlich passt es mit

    Device dev = new Device;
    

    Glaub ich weniger. Der Vorschlag mit erstmal C++ lernen scheint mir gar nicht so daneben...



  • Wieso denn ?

    Device dev = new Device;
    

    ist doch eine Möglichkeit die funktioniert , acuh wenn das nicht immer das entscheidene ist.

    Kennst du eine besser Möglichkeit ? 🙂



  • 7xCore schrieb:

    Wieso denn ?

    Device dev = new Device;
    

    ist doch eine Möglichkeit die funktioniert , acuh wenn das nicht immer das entscheidene ist.

    Kennst du eine besser Möglichkeit ? 🙂

    Device dev;
    


  • ...
    Ja klar 😋
    aber mit einem pointer


Anmelden zum Antworten