const referenz ?



  • Hallo,

    ich habe folgendes Problem: Ich möchte eine Klasse schreiben, in der ich große Daten Matrizen (Typ ist myMatI, spielt ja aber eigentlich keine Rolle) bekannt machen will (gVecMap10, gVecMap01). Diese Daten sollen nicht veränderbar sein, aber ich will auch keine Kopien im Speicher anlegen (wegen der Größe). Außerdem sollen diese Daten unter den Pseudonymen gVecMapA und gVecMapB bekannt sein.

    class Klasse
    {
      const myMatI& gVecMap10;
      const myMatI& gVecMap01;
    
      const myMatI& gVecMapA;
      const myMatI& gVecMapB;
    
      [...]
    }
    

    Diese Pseudonyme sollen auf jeweils auf eine Datenmatrix verweisen, ich möchte aber Situationsbedingt festlegen, welches Pseudonym auf welche Matrix zeigt. Wie oben gezeigt habe ich gedacht das geht am einfachsten mit Referenzen. Nun muss ich ja die Referenzen initialisieren, das habe ich im Constructor wie folgt gemacht.

    Klasse::Klasse(const myMatI&   gVecMap10New,
                   const myMatI&   gVecMap01New)
                  :gVecMap10(gVecMap10New),
                   gVecMap01(gVecMap01New)
                   gVecMapA(gVecMap10),
                   gVecMapB(gVecMap01){}
    

    Soweit compiliert es auch. Wenn ich jedoch nun Situationsabhängig zB die Pseudonyme tauschen will, also dass gVecMapA auf gVecMap01 zeigt etc , dann beschwert sich der Compiler.

    void Klasse::Swap()
    {
      gVecMapA = gVecMap01;
      gVecMapB = gVecMap10;
    
      [...]
    }
    

    In member function »void Klass::Swap()«:
    Fehler: Die Übergabe von »const myMatI« als »this«-Argument von »myMatI& myMatI::operator=(const myMatI&)« streicht Qualifizierer

    Was läuft hier falsch? Ich dachte const myMatI& sorgt dafür, dass die Daten nicht geändert werden können, macht aber nicht die Referenz an sich constant?! Warum funktioniert die Zuweisund dann nicht? Gibt es eine bessere/effizientere Methode als meine?

    Vielen Dank!



  • Referenzen sind per Definition konstant. Du kannst also nicht nachträglich ändern, worauf sie zeigen. Für diesen Fall gibt es Zeiger.



  • Vielen Dank ... diese Information hat mir gefehlt. Ich probiere es nun mit Pointern.


Anmelden zum Antworten