Array vom Typ Klasse?



  • Nathan schrieb:

    Du musst lediglich beim Zugriff im definierten Bereich bleiben, wie sonst auch, aber ansonsten erledigt der alles für dich.
    Beispiel:

    // Erstelle ein vector von 5 ints, die mit 0 initialisiert werden.
    std::vector<int> vec(5);
    // Setze das dritte Element auf 1
    vec[2] = 1;
    // Füge eine Element hinten an (sehr effizient)
    vec.push_back(3);
    // Lösche die ersten beiden Elemente (ineffizient)
    vec.erase(vec.begin(), vec.begin() + 2);
    // Füge vorne eine Element an (ineffizient)
    vec.insert(vec.begin(), 1);
    // Ändere seine Größe auf 2
    vec.resize(2);
    

    Für weitere Funktionen, siehe hier: http://en.cppreference.com/w/cpp/container/vector

    Schreibe ich es ohne die (),

    std::vector<mobject> mobjects;
    

    Bekomme ich folgende Meldung raus:
    error: 'mobject' was not declared in this scope
    error: template argument 1 is invalid
    error: template argument 2 is invalid

    Durch die Meldung "'mobject' was not declared in this scope"
    Habe ich folgendes gemacht:

    mobject mOBJECT;
        std::vector<mOBJECT> mobjects;
    

    Und bekomme diese Meldungen:

    ../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
    ../phy.h:76:17: error: from this location
    ../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
    ../phy.h:76:17: error: from this location
    ../phy.h:76:17: error: 'phy::mOBJECT' cannot appear in a constant-expression
    ../phy.h:76:24: error: template argument 1 is invalid
    ../phy.h:76:24: error: template argument 2 is invalid

    😮 😕



  • Du hast den Header nicht inkludiert, der mobject definiert.



  • Doch, habe ich



  • Ok, beide Header verwenden die selben include guards.



  • Supercomputer schrieb:

    mobject mOBJECT;
        std::vector<mOBJECT> mobjects;
    

    Und bekomme diese Meldungen:

    ../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
    ..😮 😕

    std::vector<mobject> mobjects;
    

    In die spitzen Klammern kommt der Typ.



  • Caligulaminus schrieb:

    Supercomputer schrieb:

    mobject mOBJECT;
        std::vector<mOBJECT> mobjects;
    

    Und bekomme diese Meldungen:

    ../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
    ..😮 😕

    std::vector<mobject> mobjects;
    

    In die spitzen Klammern kommt der Typ.

    Warum funktioniert es dann bei der hervorgehenden Schreibweise nicht?

    #inlcude mobject.h // Enthält die Klasse mobject
    

    So includiert ist?



  • #include "mobject.h"
    


  • Sorry, vertippt.

    Im original Code steht es richtig.

    Qt meckert nämlich sofort, wenn was nicht stimmt.

    Fehler gefunden 🙂

    Hatte in der mobject.h

    auch einen #include von phy.h drinn.

    Diesen entfernt und es funktioniert

    Danke an alle für die Hilfe



  • Eine Frage bleibt mir da noch, wie komme ich an die Werte wieder dran?

    Wenn ich z.B. die Position auf der X-Achse wissen möchte, nutze ich die Methode

    long double getpositionx();
    


  • vector<int> vec({1, 2, 3});
    assert(vec[0] == 1);
    assert(vec[1] == 2);
    assert(vec[2] == 3);
    


  • Ethon schrieb:

    vector<int> vec({1, 2, 3});
    assert(vec[0] == 1);
    assert(vec[1] == 2);
    assert(vec[2] == 3);
    

    Den Code verstehe ich gerade leider nicht 😞

    Werde da gerade 3 Variablen deklariert, die dann mit dem Index "[]" abgerufen werden?



  • Du kannst mit einem vector genauso auf die Elemente zugreifen wie beim Array auch.
    Ignorier das assert.

    vec[0] = val;
    foo = vec[1];
    


  • Nathan schrieb:

    Du kannst mit einem vector genauso auf die Elemente zugreifen wie beim Array auch.
    Ignorier das assert.

    vec[0] = val;
    foo = vec[1];
    

    Das habe ich auch gelesen, deswegen verwirrt mich das "assert(vec[0] == 1);" auch etwas, was bewirkt es?


  • Mod

    Supercomputer schrieb:

    Das habe ich auch gelesen, deswegen verwirrt mich das "assert(vec[0] == 1);" auch etwas, was bewirkt es?

    Google: C++ assert



  • Ok, danke


Anmelden zum Antworten