std::vector initialisieren



  • Normalerweise kann man doch einen vector folgendermaßen initialisieren:

    std::vector<int> v(10);
    

    Ich habe folgendes

    #include <vector>
    
    class CMyClass
    {
    private:
        static const int m_nAnzElemente = 10;
        std::vector<int> m_vec(m_nAnzElemente);
    
        // std::vector<int> m_vec(10); // geht auch nicht
    };
    

    und kriege die Fehlermeldung: error C2059: syntax error : 'constant'

    Was mache ich falsch?



  • Du kannst den Konstruktor von Membern erst in der Initialisierungsliste des Konstruktors der Klasse ausführen:

    class CMyClass
    {
    public:
        CMyClass(): m_vec(m_nAnzElemente) {} // <-
    
    private:
        static const int m_nAnzElemente = 10;
        std::vector<int> m_vec;
    };
    


  • confused schrieb:

    Was mache ich falsch?

    Du versuchst Java zu programmieren 😉

    #include <vector>
    
    class CMyClass
    {
    public:
      CMyClass();
    
    private:
        static const int m_nAnzElemente = 10;
        std::vector<int> m_vec;
    };
    
    CMyClass::CMyClass()
      : m_vec(m_nAnzElemente)
    { }
    


  • 💡 Ahh, verstehe! Danke euch für die schnelle Antwort.

    Vielleicht schicke ich gleich noch eine blöde Frage hinterher:
    Wenn die Anzahl der Elemente des vector für alle Objekte der Klasse gleich sein soll und von Beginn an feststeht, spricht auch nichts dagegen, das so zu machen (also ein static const int member), oder?



  • da spricht so oder so nichts dagegen, du könntest es auch gleich in den konstruktor hard coden. Die Anzahl der Elemente des Vectors bleibt eh variabel, du kannst immernoch Elemente anhängen und entfernen.



  • was du suchst ist wohl eher std::tr1::array bzw. boost::array

    (also ein static const int member)

    Nimm für Größenangaben besser keine signed Datentypen. Dafür gibt es in C++ extra das typedef std::size_t!



  • Wenn die Anzahl der Elemente von Beginn an feststeht und sich nicht ändert würde ich gleich garkeinen vector sondern ein Array verwenden... nur mal so.


Anmelden zum Antworten