【问题标题】:Array initialization by constructor构造函数初始化数组
【发布时间】:2012-01-06 19:11:39
【问题描述】:

我有:

class first{
   private:
   int *array;

   public:
   first(int x){
     array = new int[x][10];
   }

我想通过以下方式调用这个类:

first class1 = new first(10);

为什么它不起作用?如何从构造函数中按大小初始化数组??

【问题讨论】:

  • 在什么情况下不起作用?它会崩溃吗?在哪里?它不编译吗?你得到什么错误?发生了什么与您的预期是什么?请详细说明。
  • 错误:无法在赋值中将 'int ()[10]' 转换为 'int'。如何从构造函数按大小初始化二维数组?我不想使用向量。

标签: c++ arrays constructor


【解决方案1】:

这样就够了:

first class1(10);

new 用于分配指针时。

first *class1 = new first(10);

此外,你这里有一个不兼容:

array = new int[x][10];

array 是一个int*,但new int[x][10] 是一个二维数组。我不确定你想要哪一个。

对于一维数组:

int *array;
array = new int[x];

对于二维数组:

int (*array)[10];
array = new int[x][10];

也就是说,您最好使用std::vector


旁注:既然你在构造函数中有内存分配,你也应该implement a destructor, copy-constructor, and copy-assignment operator

【讨论】:

  • ...和一个复制赋值运算符(根据Rule of Three)。但除非你特别想为自己制造困难,否则请使用std::vector
  • 我想通过构造函数的 walue 来初始化二维数组。对象不应该是指针。向量是另一回事。如何做到这一点?
  • 答案已更新。多维数组会变得非常丑陋。所以我建议你使用vector<vector<int> > array;,除非你有充分的理由不这样做。
【解决方案2】:

您已表明想要一个一维数组 (int*),但尝试分配一个二维数组 (new [x][10])。

我假设您需要一维。

执行此操作的 C++ 方法是使用 vector

#include <vector>

class first{
   private:
   std::vector<int> array;

   public:
   explicit first(int x) : array(x) {
   }
};

【讨论】:

  • 我不需要矢量类型。我只对数组感兴趣。
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2017-08-28
  • 2011-01-25
  • 2014-10-04
相关资源
最近更新 更多