【问题标题】:VS 2012 Ultimate update 4 will not compile arrayVS 2012 Ultimate update 4 不会编译数组
【发布时间】:2014-04-11 23:12:37
【问题描述】:

所以这就是问题所在。我是新来的,但是相同的代码在 VS express 2013 上运行良好。我搜索了高低,把我的头发捐给了地板,反复用键盘威胁屏幕,并禁用了我所有的扩展无济于事:

代码:

    #include <iostream>

    using namespace std;

    int main () {
        double num;
        double arRate [] {2.2, 4.4, 7.4, 9.6}, arWeight [] {2, 6, 10, 20};
        num = 5.2;
        cout << num << endl;
        return 0;
    }

错误列表:

错误 1 ​​错误 C2601: 'arRate' : 局部函数定义是非法的第 7 行

错误 2 错误 C2143:语法错误:缺少 ';'在“}”第 7 行之前

错误 3 错误 C2143:语法错误:缺少 ';'在 ',' 第 7 行之前

错误 4 错误 C2143:语法错误:缺少 ';'在“{”第 7 行之前

错误 5 错误 C2065: 'num' : undeclared identifier LINE 8

错误 6 错误 C2065: 'num' : undeclared identifier LINE 9

7 IntelliSense:不允许不完整的类型 LINE 7

8 IntelliSense:应为“;”第 7 行

【问题讨论】:

  • 在 [] 和 { 之间使用“=”。
  • 最简单的解决方案是使用不依赖于 C++11 的 = 语法。

标签: c++ arrays visual-studio-2012 c++11 compiler-errors


【解决方案1】:

您可以前往Support For C++11 Features (Modern C++) 了解 C++11 不同版本的 Visual Studio 支持的部分。

我们可以看到Initializer lists在2012年不支持,但在2013年支持。所以在这种情况下你只需要使用2013。

您也可以只使用= 语法:

double arRate [] = {2.2, 4.4, 7.4, 9.6}, arWeight [] = {2, 6, 10, 20};
                 ^                                   ^

在 C++11 之前运行良好

【讨论】:

    【解决方案2】:

    适当的数组初始化语法:

    double array_name[] = {/* values */};
    

    您缺少= 或赋值运算符。

    【讨论】:

    • 这不是赋值运算符,只是初始化的句法。但是,OP 的语法在 C++11 中是有效的。
    • 在我添加“=”之后编译就好了我不明白的是为什么它在 VSE 2013 中工作......我认为克里斯可能已经回答了这个问题,但我不明白所有行话。
    • @TheSoggyRuler 显然一个版本支持这个 C++11 特性,而另一个不支持。
    • @TheSoggyRuler,作为记录,它应该在 2012 年使用 CTP 编译器,但在那时,我不明白你为什么不只使用 2013 年。
    • @TheSoggyRuler 另外,关于“赋值运算符”的事情是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多