Pointerübergabe per Referenz

Dieses Thema im Forum "C/C++" wurde erstellt von MadJoe, 02.04.2006.

  1. #1 MadJoe, 02.04.2006
    Zuletzt bearbeitet: 02.04.2006
    MadJoe

    MadJoe Eroberer

    Dabei seit:
    14.03.2005
    Beiträge:
    66
    Zustimmungen:
    0
    hallo zusammen!

    habe ein sehr ungewöhnliches problem mit zeigern:
    ich versuche einen zeiger per referenz zu übergeben, z.b:

    Code:
    void printInteger(int* &ptrInteger)
    {
         cout << *ptrInteger << endl;
    }
    
    int main(int argc, char** argv)
    {
         int* i = new int;
         *i = 100;
         printInteger(i);
         return(0);
    }
    
    ich habe das mal in dieser form getestet, um überhaupt zu überprüfen ob das generell funktioniert, mit erfolgt.

    jetzt wird man sich fragen, warum ich so etwas seltsames überhaupt machen will, nun die idee dahinter ist bei einem serialisierungssystem pointer adressen in objekte festzulegen um verknüpfungen zwischen objekten beim laden wieder dynamisch herzustellen. (könnte es natürlich auch mit ** pointer und &pointer übergeben, aber ist wohl eine estetische sache, wenns denn klappt)

    verwende ich das jetzt im größeren zusammenhang, z.b. mit einer abstrakten basisklasse ISerializable, und möchte dieses dann in der Form "ISerializable* &object" übergeben so erkennt es der compiler zwar ohne meckern an, jedoch wird die funktion einfach nicht aufgerufen, wenn ich das programm ausführe (sicher festgestellt durch wxMessageBoxes und couts usw.)

    vielleicht noch zu erwähnen, dass es folgende überladungen für meine write-funtkionen gibt:

    BinarySerializer::write(ISerializable &object);
    BinarySerializer::wirte(ISerializable* &object);

    hat den irgendjemand erfahrungen mit solch einem problem gemacht oder irgendwelche hinweise, die mir weiter helfen könnten?

    gegoogelt hab ich schon paar mal, aber allein unter pointer per referenz übergeben findet man eigentlich nichts brauchbares, verwendet vermutlich auch sonst niemand

    mfg madjoe
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Davon abgesehen, dass es in Deinem Beispiel in main
    *i = 100;
    heissen muss, tut Dein Code ja. Kannst Du vielleicht ein Beispiel angeben, in dem Dein Problem deutlich wird? Mir faellt nicht ein, warum man Zeiger nicht als Referenzen uebergeben koennen sollte, von daher waere eben ein Programm, das sich _nicht_ so verhaelt wie erwartet, lehrreicher.

    Hast Du es mal mit gdb versucht, um rauszufinden, was an der entsprechenden Stelle geschieht, und wieso der Funktionsaufruf uebersprungen wird?
     
  4. #3 MadJoe, 02.04.2006
    Zuletzt bearbeitet: 03.04.2006
    MadJoe

    MadJoe Eroberer

    Dabei seit:
    14.03.2005
    Beiträge:
    66
    Zustimmungen:
    0
    ja sorry, hab das mal schnell runtergeschrieben, anstatt zu kopieren, ja wie schon gesagt, wie zu lesen ist, habe ich dieses beispiel ja eh mit erfolg ausprobiert. nur mit der variante, wo er implizit in einen basetyp konvertieren muss geht es offensichtlich nicht, zumindest in der praxis, weil der compiler meckert net beim übersetzten...

    ich könnte jetzt zwei tonnen source reinstellen, ist aber net so interessant, von daher werde ich jetzt ein kleines ableitungsbeispiel zusammenbauen, im gleichen umfang wie meinen integer test

    EDIT:

    so, hab mein problem wieder mal selbst gelöst...
    es ist kein implizites casting zwischen zeigern verschiedenen typs in der ableitungshierarchie möglich, offensichtlich kann man doch nicht alles vom compiler erwarten, nun, hab das jetzt aber mittels void* gelöst und übergebe meinen zeiger mittels &zeiger
     
  5. x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    Aber warum denn erst einen Zeiger auf die Instanz einer Klasse als Referenz übergeben, wenn dieser doch bereits das Objekt selbst referenziert ?!
     
  6. MadJoe

    MadJoe Eroberer

    Dabei seit:
    14.03.2005
    Beiträge:
    66
    Zustimmungen:
    0
    meine idee ist, die adresse des zugrundeliegenden pointers zu ändern (z.b. wenn er mitglied einer serialisierbaren klasse ist, um alle bezüge von dynamisch generierten objekten wiederherzustellen, wenn der binäre datenstrom wieder eingelesen wird... also muss ich, wenn ich von fremder stelle die bezüge herstellen will die pointer in der entsprechenden klasse selbst beschreiben können (also **-pointer) bzw. referenz hätte es eben getan, weil man dann das & vor der übergabe weglassen kann... zu verdeutlichung, es sei persistentDataEvent die readin-funktion einer serialisierbaren klasse:

    Code:
    void MeineKlasse:persistentDataEvent(IUnserializer &u)
    {
          u.read(m_prtLinkToOriginalObject); // bzw. jetzt &m_ptrLink....
    }
    
    also beim writeout-prozess wurde hier ein pointer zum objekt XY gefunden, welches schon ein paar mal vorher in der objekthierachie mit der gleichen adresse als XY erkannt wurde, jetzt wurde beim einlesen ein objekt vom IUnserializer selbst generiert, dass das ursprüngliche objekt XY darstellt und der pointer in dieser klasse muss jetzt wieder auf das neue objekt XY zeigen, so wie er es auch in anderen objekten der objekthierachie schon tut
     
Thema: Pointerübergabe per Referenz
Besucher kamen mit folgenden Suchen
  1. c pointer als reference übergeben

Die Seite wird geladen...

Pointerübergabe per Referenz - Ähnliche Themen

  1. Frankreich erneuert seine Referenzliste zu freier Software

    Frankreich erneuert seine Referenzliste zu freier Software: Frankreich hat die Ausgabe für 2016 von SILL, der Referenzliste zu freier Software zur Verwendung in französischen Amtsstuben herausgegeben....
  2. Firefox OS Referenz-Phone »Flame« kann vorbestellt werden

    Firefox OS Referenz-Phone »Flame« kann vorbestellt werden: Mozilla stellt mit dem »Flame« ein erstes offizielles Referenzgerät für Firefox OS vor. Das Gerät entspricht Smartphones aus dem mittleren...
  3. latex cite: sortieren der Referenzen

    latex cite: sortieren der Referenzen: Hallo, wenn ich bei LaTeX im bibliographystyle{plain} mittels \cite{key1,key2,key3} mehrere Quellen angebe, erscheinen die Ziffern im Text in...
  4. [Perl] Check auf Referenz...Hash

    [Perl] Check auf Referenz...Hash: Hallo! Mal ne kleine Frage. Gibt es ein Funktion mit der ich checken kann, ob in einem Hash der Value eine Referenz auf einen weiter Hash...
  5. Perl: Key im Hash via Referenz setzen

    Perl: Key im Hash via Referenz setzen: Hallo zusammen, ich habe da ein Problem und weiss nicht so recht weiter. Auch selfhtml --> Perl konnte mir nicht so recht weiterhelfen....