0

我收到错误

"The expression needs to be a constant" 

当我尝试这样做时:

float mat1[m_Floats.size()][iNumClass];

我可以欺骗编译器(VS2010)编译它吗?

4

3 回答 3

2

没有。只有 C99 指定动态数组分配(即,只有在编译时才知道大小)。也许该标准有一个 MSVC 扩展,但您应该采用规范的方式来创建指针数组和每个浮点子数组new,例如:

float **mat1 = new float*[m_Floats.size()];
for (int i = 0; i < m_Floats.size(); ++i) {
    mat1[i] = new float[iNumClass];
}
于 2013-10-18T12:37:46.767 回答
1

well, instead of "tricking the compiler", you can dynamically allocate your matrix with the operator new

于 2013-10-18T12:36:27.557 回答
0

不,声明数组的大小需要在编译时知道。的值m_Floats.size()取决于该对象中有多少成员。

如果您需要分配具有可变大小的数组,您需要自己处理它new或使用一些适当的类/方法为您封装它。

于 2013-10-18T12:40:58.253 回答