【问题标题】:expected constant expression in vc++vc++ 中的预期常量表达式
【发布时间】:2014-06-02 17:42:23
【问题描述】:

为什么这段代码不能在 Visual Studio 2008 中用 VC++ 15 编译?

错误:C2057:预期的常量表达式,C2466:无法分配常量大小为 0 的数组。

void foo(int a, int b)
{
double arr[a][b]
...
}

虽然它在 GCC 4.4 中运行良好。我需要编译器之间的兼容性。

【问题讨论】:

    标签: c++ visual-c++ visual-studio-2008


    【解决方案1】:

    为什么这段代码不能在 Visual Studio 2008 中用 VC++ 15 编译?

    因为 C 风格的可变长度数组不是 C++ 语言的一部分。 GCC 将它们作为非标准扩展提供;有些编译器没有。

    我需要编译器之间的兼容性。

    然后你需要一个动态数组,例如:

    std::vector< std::vector<double> > arr(a, std::vector<double>(b));
    

    或者,如果您希望所有元素像在二维数组中一样连续:

    std::vector<double> arr(a*b);
    

    当您访问它时,使用适当的算法来计算索引。

    【讨论】:

      【解决方案2】:

      编译器在编译时需要类的确切大小,您将不得不使用 new 运算符来动态分配内存,而向量是此类操作的最佳选择。

      更多信息请参考

      http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html http://www.boost.org/doc/libs/1_39_0/libs/multi_array/doc/user.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多