2016-04-07 7 views
1

Angesichts der folgenden Struktur einfügen mit:ein neues Element in Vektor, der eine verspannt init-Liste

struct TestStruct 
{ 
    int mA; 
    int mB; 
}; 

und die folgenden Container:

std::vector<TestStruct> _testContainer; 

Der Compiler wirft einen Fehler beim Versuch, Elemente hinzufügen verwenden eine verschachtelte Initial-Liste wie folgt:

Ich benutze Visual Studio C++ Compiler von 2010, die cou Ich bin der Schuldige. Ist das C++ gültig oder fehlt mir etwas?

+0

Versuchen Sie '_testContainer.push_back (TestStruct {1,2});' –

+0

Seltsam ... funktioniert für mich in VS2013 – yano

+0

Als Nebenbemerkung, stellen Sie sicher, dass Sie diese Variable nicht im globalen Namespace deklarieren, weil es Der Name ist dort illegal. – user2079303

Antwort

3

MSVS 2010 ist nicht C++ 11-kompatibel. Ich schlage vor, auf MSVS 2015 zu aktualisieren und es erneut zu versuchen. Wie Sie aus diesem Beispiel

#include <iostream> 
#include <vector> 

struct foo 
{ 
    int a; 
    int b; 
}; 

int main(void) { 
    std::vector<foo> data; 
    data.push_back({1,2}); 
} 

Live Example

sehen kann, ist es in Ordnung.

0

Ich benutze Visual Studio C++ Compiler von 2010, die der Täter sein könnte.

Könnte sein, VS2010 hat den aktuellen Sprachstandard nicht unterstützt.

Ist dies gültig C++ oder fehle ich etwas?

Yes it's valid c++ syntax.

0

die die C++ 11-Standard nach, sollte dies in Ordnung sein:

struct foo { 
    int a; 
    int b; 
}; 

int main() { 
    std::vector<foo> data; 
    data.push_back({1,2}); 

    return 0; 
} 

Alternativ können Sie verwenden:

int main() { 
    std::vector<foo> data; 
    data.emplace_back(1,2); 

    return 0; 
} 

MSVC noch Schwierigkeiten haben, Bei neueren Standards sollte ein Upgrade auf 2013 oder sogar 2015 hilfreich sein.

Verwandte Themen