【问题标题】:Multi-dimension array allocation for class variable类变量的多维数组分配
【发布时间】:2015-01-17 10:32:37
【问题描述】:

我正在尝试使用 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;
}

这是错误结果: http://coliru.stacked-crooked.com/a/3d69bcd38f4bbf2a

【问题讨论】:

  • 请不要。只是不要。改用std::arraystd::vector
  • 我不是专业人士,只是在做一些简单的代码。在 fortran 中,可以使用 allocate(a(n,n,n,n)) 来完成。在这一点上,似乎 c 和 c++ 需要更多代码。
  • 如果您不是专业人士,那么最好的理由可能是不使用new std::arraystd::vector 更易于使用且更安全。为了正确使用new,你需要相当多的C++知识。
  • 非常感谢,PC。会试试的!

标签: c++ c++11 memory


【解决方案1】:

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

声明a

float (*a)[10];

Demo.

【讨论】:

  • 谢谢,哥伦布。但在某些情况下,放宽所有维度会更有利。
  • @YunguiXu 如果你在编译时不知道边界,那么一个简单的数组可能无论如何都行不通。
  • @YunguiXu 扩展 Columbo 的评论:为了在其中分配数组或索引,编译器需要知道数组中每个元素的大小。 float[] 是不完整的类型,编译器不知道它的大小,所以不能声明或分配float[] 的数组。 float (*a)[]; 的声明实际上是合法的,但是你不能把它当作一个数组来使用,你也没有办法用 new 来初始化它。 (你可以用extern float v[]; float (*a)[] = v;之类的东西来初始化它。)
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 2023-03-28
  • 2020-04-24
  • 1970-01-01
  • 2017-03-18
相关资源
最近更新 更多