2016-07-25 55 views
3

我想使用Visual Studio 2012 Professional編譯以下源代碼,並且出現編譯錯誤。但是相同的代碼在Visual Studio 2013中工作。當我檢查Vs 2012時,它支持大多數C++ 11功能。該程序使用C++ 11兼容編譯器構建。 我找到這個程序http://lucid-motif.blogspot.com/2013/11/coding-puzzle-knight-sequences.htmlVisual Studio C++ 11g編譯錯誤 - 太多初始化程序

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 
} 

鍵盤和keyPadRoot初始化器給下面的錯誤

錯誤3錯誤C1903:無法從先前的錯誤(多個)恢復;正在停止編譯 錯誤2錯誤C2078:太多的初始值設定
錯誤1錯誤C2552:「鍵」:非聚集不能初始化列表初始化

感謝您的幫助。

+0

如果您想要MSVS的標準合規性,那麼2015更新3是您現在可以獲得的最佳選擇。 – NathanOliver

+0

您似乎很確定地證明VS 2012不支持您嘗試使用的C++ 11功能。 –

+1

[此處的功能支持矩陣](https://msdn.microsoft.com/en-us/library/hh567368.aspx)。初始化列表支持從VS2013開始支持。 –

回答

2

VC2012不支持並且不聲稱支持整個C++ 11標準。

初始化列表是省略的內容之一。

VC2015幾乎實現了整個C++ 11標準,所以你應該升級到那個。 (我相信一些SFINAE支持仍然缺失)。