2 dimensionaler Vector



  • Ich habe folgende Funkion:

    std::vector<std::vector<std::unique_ptr<SlideBar>>> * getMenuSliders();
    

    Wieso ist der erste Aufruf laut kompiler gültig, der zweite aber nicht?

    m_MenuManager.getMenuSliders()->at(i).at(j)->setActive(false); //Kein Fehler
    m_MenuManager.getMenuSliders()[i][j]->setActive(false); //Fehler (Expression must have pointer type)
    

  • Mod

    Warum hast du denn beim ersten Mal einmal einen Pfeil und das andere Mal einen Punkt gesetzt? Wenn du das weißt (Du hast doch wohl nicht einfach nur ausprobiert, bis der Compiler nicht mehr meckerte, oder?), dann weißt du auch, warum die zweite Syntax so nicht funktioniert.

    Das Konstrukt, das du da hast, ist schrecklich. Ich schätze die Wahrscheinlichkeit, dass du das Monstrum wirklich brauchst, als sehr gering ein. Mit einem 2D-Feld hat das jedenfalls nichts mehr zu tun. Ein 2D-Feld wäre eher so etwas wie ein einfacher vector<Datentyp> mit Merken der Zeilenlänge.



  • Genau was der Compiler sagt:
    Die Methode gibt einen Pointer zurück, und den muss man zunächst dereferenzieren, eh man auf die Elemente zugreifen kann. Das macht das erste -> im oberen Ausdruck.
    operator[] dagegen verlangt ein Objekt oder zumindest Referenz. Genau die solltest du bei diesem Ansatz auch verwenden statt dem Pointer.

    PS: kein Kommentar zum Ansatz selbst.


Anmelden zum Antworten