Visual Studio C++11g 编译错误 - 初始化程序太多

Posted

技术标签:

【中文标题】Visual Studio C++11g 编译错误 - 初始化程序太多【英文标题】:Visual Studio C++11g compilation error - too many initializers 【发布时间】:2016-07-25 14:16:53 【问题描述】:

我正在尝试使用 Visual Studio 2012 Professional 编译以下源代码,但出现编译错误。但是相同的代码在 Visual Studio 2013 中运行。当我检查 Vs 2012 时,它支持大多数 C++ 11 功能。该程序是使用符合 C++ 11 的编译器构建的。 我找到了这个程序http://lucid-motif.blogspot.com/2013/11/coding-puzzle-knight-sequences.html

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

keyPad 和 keyPadRoot 初始化程序给出以下错误

错误 3 错误 C1903:无法从先前的错误中恢复;停止编译 错误 2 错误 C2078:初始化程序过多 错误 1 ​​错误 C2552: 'keyPad' : non-aggregates 不能用初始化列表初始化

感谢您的帮助。

【问题讨论】:

如果您想从 MSVS 获得标准合规性,那么 2015 更新 3 是您现在可以获得的最佳选择。 您似乎已经非常明确地表明 VS 2012 不支持您尝试使用的 C++11 功能。 Feature support matrix here。从 VS2013 开始支持初始化列表。 【参考方案1】:

VC2012 不支持,也不声称支持整个 C++11 标准。

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

VC2015 几乎实现了整个 C++11 标准,所以你应该升级到那个。 (我相信仍然缺少一些 SFINAE 支持)。

【讨论】:

以上是关于Visual Studio C++11g 编译错误 - 初始化程序太多的主要内容,如果未能解决你的问题,请参考以下文章

C ++定义类编译错误的函数(Visual Studio)

Visual Studio 2010 在编译 C++/CLI 项目时出现奇怪的错误

这些 G++ 标志的 Visual Studio 等效项?

std库中的Visual Studio编译错误

visual studio编译错误集(转)

Visual Studio 2013 编译严格的 c++11