std::array in initializer list



  • Hallo!

    ich habe eine std::array als klassenmember und möchte es gern in der Initializer List füllen. Wie genau macht man das?

    class A{
    public:
        A();
    
    private:
        std::array<int, 5> arr;
    
    };
    

    Folgendes geht leider nicht:

    A::A() : arr({1, 2, 3, 4, 5})
    {
        //blablubb
    }
    

    Gibt es eine Möglichkeit das irgendwie hinzukrigen?


  • Mod

    Gibt es eine Möglichkeit das irgendwie hinzukrigen?

    Ja, lass die Klammern weg - die sind doch hässlich:

    A::A() : arr{1, 2, 3, 4, 5}
    

    Edit: Zur Terminologie:

    ich habe eine std::array als klassenmember und möchte es gern in der Initializer List füllen.

    Die Initialisierungsliste ist die Liste im Konstruktor die Basisklassen und Member initialisiert. Eine initializer list ist eine in geschweiften Klammern eingeschlossene Liste von initializern.



  • Arcoth schrieb:

    Gibt es eine Möglichkeit das irgendwie hinzukrigen?

    Ja, lass die Klammern weg - die sind doch hässlich:

    A::A() : arr{1, 2, 3, 4, 5}
    

    Edit: Zur Terminologie:

    ich habe eine std::array als klassenmember und möchte es gern in der Initializer List füllen.

    Die Initialisierungsliste ist die Liste im Konstruktor die Basisklassen und Member initialisiert. Eine initializer list ist eine in geschweiften Klammern eingeschlossene Liste von initializern.

    Visual Studio 2012 sagt, dass die () Klammern fehlen.


  • Mod

    Visual Studio 2012 sagt, dass die () Klammern fehlen.

    VS 2012 unterstützt auch keine list initialization. VC++ 2013 schon. Siehe auch hier.



  • std::array hat keinen Konstruktor für Initializer-Lists. Du kannst aber mal

    {{ 1, 2, 3}}
    

    probieren.

    http://stackoverflow.com/questions/6893700/how-to-construct-stdarray-object-with-initializer-list



  • Arcoth schrieb:

    Visual Studio 2012 sagt, dass die () Klammern fehlen.

    VS 2012 unterstützt auch keine list initialization. VC++ 2013 schon. Siehe auch hier.

    Alles klar. Danke!


Log in to reply