C++ 类变量的多维数组分配

C++ 类变量的多维数组分配,c++,c++11,memory,C++,C++11,Memory,我正在尝试使用c++11在类变量中分配多维数组。无法使用“float**a=new float[][]”,尝试使用auto,但仍然无法工作。有什么想法吗,先生 #include <string.h> class abc{ public: float **a; abc(){ auto a=new float[10][10]; this->a=a; } }; int main(){ abc * a=new abc(); return 1; } #包括 ab

我正在尝试使用c++11在类变量中分配多维数组。无法使用“float**a=new float[][]”,尝试使用auto,但仍然无法工作。有什么想法吗,先生

#include <string.h>
class abc{
 public:
 float **a;
 abc(){
   auto a=new float[10][10];
   this->a=a;
 }
};
int main(){
 abc * a=new abc();
 return 1;
}
#包括
abc班{
公众:
浮动**a;
abc(){
自动a=新浮动[10][10];
这->a=a;
}
};
int main(){
abc*a=新abc();
返回1;
}
以下是错误结果:

您分配的是一组数组。您不能将其分配给指向指针的指针,因为您没有指针数组,而是其他数组。数组不是指针。它们可以衰变为一个,但那是另一回事

a
声明为

float (*a)[10];

谢谢,哥伦布。但在某些情况下,放松所有维度会更有利。@YunguiXu如果在编译时不知道边界,简单数组可能无论如何都不起作用。@YunguiXu要扩展Columbo的注释:为了分配数组或索引到其中,编译器需要知道数组中每个元素的大小
float[]
是一种不完整的类型,编译器不知道它的大小,因此不能声明或分配
float[]
数组。声明
float(*a)[]
实际上是合法的,但不能将其用作数组,也无法使用
new
对其进行初始化。(您可以使用类似于
extern float v[];float(*a)[]=v;
的内容初始化它)请不要这样做。别这样。改用
std::array
std::vector
。我不是专业人士,只是在编写一些简单的代码。在fortran中,它可以通过分配(a(n,n,n,n))完成。看来C和C++需要更多的代码。如果你不是专业人员,那么这可能是最好的理由不使用<代码>新< /C>。code>std::array和
std::vector
更易于使用且更安全。为了正确使用<代码>新< /代码>,你需要相当多的C++知识。多谢,PC会尝试!