我尝试从互联网上编译一些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。
感谢您的回答!
答案 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
}