同样的代码可以在g++中编译,但不能在VS中编译
Same code compiling in g++, but not in VS
我正试图在Visual Studio 2015中运行我的代码,并且我在下一个代码中获得expression must have a constant value
上的double x1[dim];
错误。
double fitness(const double x[], const int &dim) {
double sum = 0.0;
double x1[dim];
...
return sum;
}
同样的代码在g++ 4.8
上运行没有错误。那么我如何在Visual Studio 2015中做同样的事情呢?
是我的问题与编译器或代码实现?
double x1[dim];
是可变长度数组。它不是标准的c++。
它在gcc
上工作的原因是gcc
有一个允许vla的扩展。VS2015没有,所以这就是为什么它不能编译(虽然它有自己的扩展集,只是不是那个)。
最好的选择是std::vector
:
std::vector<double> x1(dim); //array of size dim
如果你不能使用,你仍然可以使用手动动态数组(尽管不推荐):
double* x1 = new double[dim];
delete[] x1; //Don't forget to delete it when you are done
//Alternatively, create a class which wraps the dynamic array, so you can use RAII
在过去,当我想在MSVC上使用VLA时,一个解决方法是每当我想要或需要在不支持VLA的编译器上使用VLA特性时使用alloca()
。
相关文章:
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- C++程序使用 mingw 在 Linux 上交叉编译在 MSy2 中工作,但不能直接在 Windows 中工作
- 此模板函数在哪里生成?可以通过g++编译,但不能在Visual Studio中编译
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- 可以在Ubuntu中进行编译,但不能在Mac OS X中进行编译
- 是否可以在编译时使用`constexpr std::initializer_list`,但不能使用ODR
- C++ 代码使用 .cpp Source 编译,但不能使用 .c 进行编译
- random_shuffle() 适用于 Windows,但不能在 Linux 上编译
- VRPN C++代码在Linux上编译,但不能在Windows上编译
- C++中的简单代码正在编译,但不能在Linux中执行
- 这个模板"specialization"代码在做什么,为什么它可以编译但不能按预期工作?
- c++代码可以在centosg++中编译,但不能在Visual studio 2008中编译
- 为什么谷歌测试编译,但不能看到我的项目来源
- Netbeans Cpp编译和运行项目,但不能使用cppunit进行测试
- c++代码可以在mac上编译,但不能在linux上编译
- 标量初始化器代码中的多余元素可以用gcc编译,但不能用g++
- Visual Studio 2010 包含文件可以'see'但不能编译
- Visual Studio 2010 c++ SDL游戏可以在它编译的计算机上运行,但不能在任何其他计算机上运行
- 阿杜伊诺崇高文本 2.我可以编译但不能上传。错误"The system cannot find the file specified"