在c ++中使用vector.size()的Init数组

时间:2016-02-29 13:45:27

标签: c++ arrays stdvector

我尝试从互联网上编译一些c ++ - Code (http://arma.sourceforge.net/shadows/)。

编译代码时,我得到一个初始化数组的错误。 示例(来自代码 - > GaussianMixtureModel.cpp行:122):

void function()
{
  int k = Vector.size();
  uchar* Ptrs[k];
  // Does somthing with the Ptrs
}

我还尝试将其编辑为以下内容:

const int k = Vector.size();

但它没有用。我将不胜感激任何帮助!

我正在使用Visual Studio 2012。

感谢您的回答!

4 个答案:

答案 0 :(得分:3)

可变长度的数组不是标准的C ++,它们是gcc和clang中的编译器扩展。

看起来你要编译的代码需要使用上面的一个来编译。

答案 1 :(得分:3)

这段代码试图使用的是 VLA - 可变长度数组(是的,即使你做了,它仍然是变量@Test public void strangeMethodTest() throws Exception { ExampleService exampleService = PowerMockito.spy(new ExampleService()); PowerMockito.when(exampleService, "privateMethod").thenReturn(""); exampleService.strangeMethod(); } )。您可以阅读有关它在Visual Studio中如何工作的更多信息及其原因:

答案 2 :(得分:2)

正如Baum mit Augen指出的那样,visual studio不支持可变长度数组的非标准语言扩展。

要使程序符合标准,您可以使用动态分配的数组:

auto Ptrs = std::vector<uchar*>(k);

根据Ptrs的使用方式,可能需要进行其他一些更改。

答案 3 :(得分:1)

在标准C ++中,您只能定义编译时常量长度的数组。这意味着,您无法使用k,因为它是在运行时确定的。你从互联网上获得的代码可能使用了一个名为“可变长度数组”(VLA)的扩展,Visual Studio没有实现。

如果向量清理其内存的语义在您的情况下是正确的,则可以改为定义uchar*的向量:

void function() {
  auto vecSize = Vector.size();
  auto Ptrs= vector<uchar*>(k, nullptr);
  // Does somthing with the Ptrs
}