2016-07-25 8 views
3

Ich versuche, den folgenden Quellcode mit Visual Studio 2012 Professional zu kompilieren, und ich bekomme die Kompilierungsfehler. Aber der gleiche Code funktioniert in Visual Studio 2013. Wenn ich Vs 2012 überprüfe, unterstützt es die meisten C++ 11-Funktionen. Das Programm wird mit C++ 11-kompatiblem Compiler erstellt. Ich fand dieses Programm http://lucid-motif.blogspot.com/2013/11/coding-puzzle-knight-sequences.html?Visual Studio C++ 11g Kompilierungsfehler - zu viele Initialisierer

typedef enum   { _A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_1,_2,_3 } TKeyIdentity; 

typedef std::vector<TKeyIdentity const>  TKeyPath 
typedef std::vector<TKeyPath const>   TKeyMap; 

const TKeyMap keyPad = 
{ 
{ _H, _L },   // A 
{ _I, _K, _M },  // B 
{ _F, _J, _L, _N }, // C 
{ _G, _M, _O },  // D 
{ _H, _N },   // E 
{ _C, _M, _1 },  // F (_1) not valid for 2 moves followed by 1 move rule 
{ _D, _N, _2 },  // G 
{ _A, _E, _K, _O, _1, _3 }, // H 
{ _B, _L, _2 },  // I 
{ _C, _M, _3 },  // J (_3) not valid for 2 moves followed by 1 move rule 
{ _B, _H, _2 },  // K 
{ _A, _C, _I, _3 }, // L 
{ _B, _D, _F, _J }, // M 
{ _C, _E, _G, _1 }, // N 
{ _D, _H, _2 },  // O (oh) 
{ _F, _H, _N },  // 1 
{ _G, _I, _K, _O }, // 2 (_K) & (_O) not valid for 2 moves followed be 1 move rule 
{ _H, _J, _L }  // 3 
}; 

const TKeyPath keyPadRoot = 
{ 
_A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _1, _2, _3 
} 

Tastatur und keyPadRoot Initialisierer geben den unten Fehler

Fehler 3 Fehler C1903: Kann nicht von früheren Fehler (s) zurückzugewinnen; Stoppen Kompilation Fehler 2 Fehler C2078: zu viele Initialisierer
Fehler 1 C2552 Fehler: ‚Taste‘: Nicht-Aggregate nicht mit Initialisiererliste initialisiert werden kann

Vielen Dank für Ihre Hilfe.

+0

Wenn Sie die Standardkonformität von MSVS wollen, dann ist 2015 Update 3 das Beste, was Sie jetzt bekommen können. – NathanOliver

+0

Sie scheinen ziemlich überzeugend gezeigt zu haben, dass VS 2012 die C++ 11-Funktion (en), die Sie verwenden möchten, nicht unterstützt. –

+1

[Feature-Support-Matrix hier] (https://msdn.microsoft.com/en-us/library/hh567368.aspx). Initialisierungslisten werden beginnend mit VS2013 unterstützt. –

Antwort

2

VC2012 unterstützt nicht den gesamten C++ 11-Standard.

Initialisierungslisten sind eines der Dinge weggelassen.

VC2015 implementiert praktisch den gesamten C++ 11-Standard, daher sollten Sie darauf aktualisieren. (Ich glaube, dass einige SFINAE-Unterstützung noch fehlt).