Objekte einer Klasse beibehalten



  • Moin,
    wie kann ich in einer Klasse, in der ich mit Objekten anderer Klassen hantiere, verhindern, dass diese objekte nach durchlauf der Methode die sie anlegt und initialisiert, verfallen? Eine Globale deklaration funktioniert nicht, da ich dort immer folgenden fehler bekomme:

    Fehler    1    error C2248: "Pylon::CTlFactory::operator =": Kein Zugriff auf private Member, dessen Deklaration in der Pylon::CTlFactory-Klasse erfolgte.
    

    In dem fall habe ich ein Camera-Objekt, ein streamgrabber-Objekt und mehrere handles, auf die weiter zugegriffen können werden muss, ohne sie jedes mal neu zu erstellen (und somit immer die verbindung zur kamera zu verlieren).

    Danke 🙂



  • Warum machst du die Objekte nicht zu Membern deiner Klasse?



  • Ich werd mal die google-trommel anschmeißen, danke



  • Du solltest am besten eine eigene Kamera-Klasse erstellen, in der du alle nötigen Handles und Objekte unterbringst. Ich arbeite gerade an auch mit einer (Zeilen-)Kamera. Und ich habe eine Ober-Struktur (keine Klasse, da C), die quasi die Kamera repräsentiert und verschiedene Member wie weitere Strukturen und Handles (Grabber-Handle, Kamera-Handle, Connector-Handle, verschiedenste Settings wie Exposure, Gain, Werte für Software-Korrekturen usw.). Sowas in der Art solltest du am besten auch machen. Alles logisch strukturieren (dabei ruhig mehrere Klassen/Strukturen bilden) und unter einen Hut bringen.



  • Cool, danke. Hab hier auch ne Basler Zeilenkamera vor mir und muss die (in verbindung mit meinen "ausbaufähigen" C++-kenntnissen) über deren Pylon-Driver zum rennen bringen 🙄



  • Auch ne Zeilenkamera? Ok, cool, vielleicht können wir uns in Zukunft hin und wieder austauschen.



  • Gerne, wobei meine grund-kenntnisse auf dem gebiet grade in arbeit sind ^^



  • Sou, sobald ich objekt aus der fremd-API nicht sofort bei deklaration initialisiere, bekomme ich diesen fehler:

    Fehler	1	error C2248: "Pylon::CBaslerGigECamera::operator =": Kein Zugriff auf private Member, dessen Deklaration in der Pylon::CBaslerGigECamera-Klasse erfolgte.
    

    Wie kann ich das umgehen? Irgendwelche tricks?
    Hilfe!



  • Nein, du darfst eben nicht auf den operator= zugreifen. Es hat einen Grund, dass dieser private ist, wahrscheinlich ist die Zuweisungs-Semantik nicht sinnvoll.

    Wieso brauchst du Zuweisung? Initialisiere das Objekt doch direkt. Wenn du es später initialisieren willst, arbeite mit Zeigern.


Anmelden zum Antworten