Der folgende Code kompiliert OK XCode 5.0 verwenden, aber nicht Visual Studio 2013.Wie initialisiert man eine Vektorelementvariable in der Klassendefinition?
#include <vector>
class VectorInit
{
private:
std::vector<int> m_vector{1, 2, 3}; // fails to compile using VS 2013
};
int main()
{
std::vector<int> vector{1, 2, 3};
VectorInit vectorInit;
return 0;
}
Dies ist der Fehler, dass Visual Studio-Berichte:
Error 1 error C2664: 'std::vector<int,std::allocator<_Ty>>::vector(std::initializer_list<int>,const std::allocator<_Ty> &)' : cannot convert argument 3 from 'int' to 'const std::allocator<_Ty> &' c:\visual studio 2013\projects\vector-init\main.cpp 6 1 vector-init
Ich habe ein Beispiel zu finden, wie es nicht geschafft einen Vektor wie diesen in einer Klassendefinition zu initialisieren.
Welcher Compiler ist korrekt?
Wenn die Syntax nicht gültig ist, ist die einzige Option, m_vector in der Konstruktorinitialisiererliste zu initialisieren?
Visual 2013 ist noch nicht richtig mit nicht statischen Member in der Klasseninitialisierung in allen Fällen, aggregiert fehlschlägt, nur zum Beispiel Kopie Konstruktor zu sehen. initializer_list ctor auch. – galop1n
@ galop1n Entschuldigung, ich verstehe Ihren Kommentar nicht ganz. Bitte können Sie klären. – ksl
in der Klassenmitgliedsinitialisierung ist ein C++ 11-Feature, das sein Debüt in VS2013 gibt. Wenn der Member jedoch ein Aggregat ist, ist der Compiler fehlerhaft und versucht stattdessen, einen Kopierkonstruktor zu verwenden. Es ignoriert auch Konstruktoren, die eine Initialisierungsliste verwenden, und versucht, die Parameter nur mit regulären Konstruktoren abzugleichen. – galop1n