Bräuchte mal Hilfe mit Call-by-Reference



  • Normal benutze ich nur CBV, aber jetzt ist wohl mal CBR nötig. Ich habe nun etwas programmiert, aber die Werte werden nicht übergeben. Hier etwas Code:

    Haupt-Klasse:

    // data buffer (diese Zeiger zeigen bereits auf gültige Daten)
    double *pdDistance;
    short *psIntensity;
    

    Haupt-Klasse:

    int MainClass::GetMyData(double* pdD, short* psI)
    {
      pdD=pdDistance;
      psI=psIntensity;
    
      // to do: Schutz vor leerem Pointer, bei Fehler return -1
      return 0;
    }
    

    Andere Klasse:

    // data buffer
    double* pdD;
    short* psI;
    

    Andere Klasse:

    [...]
    int error = m_pMainDlg->GetMyData(pdD,psI);
    [...]
    

    Zusammengefasst: In der Hauptklasse liegen Daten in 2 Buffern. Eine andere Klasse will diese Daten irgendwann holen. Dazu rufe ich GetMyData() auf, in der Hoffnung, dass ich 2 Zeiger auf die Buffer zurückbekomme. Bekomme ich aber gerade nicht. Ich schätze ich habe irgendwas mit den & und * Zeichen nicht verstanden. Nur was muss wohin? Danke für Eure Hilfe!



  • Du übergibst deine Pointer immernoch by Value.
    Wenn du das Ziel der Pointer ändern willst, müsstest du es so machen:

    int MainClass::GetMyData(double*& pdD, short*& psI)
    {
      pdD=pdDistance;
      psI=psIntensity;
    
      // to do: Schutz vor leerem Pointer, bei Fehler return -1
      return 0;
    }
    

    Edit: Alternative um es hoffentlich ganz klar zu machen:

    int MainClass::GetMyData(double** pdD, short** psI)
    {
      (*pdD)=pdDistance;
      (*psI)=psIntensity;
    
      // to do: Schutz vor leerem Pointer, bei Fehler return -1
      return 0;
    }
    


  • Ah, stimmt, jetzt klappts, danke 🙂


Anmelden zum Antworten