Инициализация массива конструктором - PullRequest
2 голосов
/ 06 января 2012

У меня есть:

class first{
   private:
   int *array;

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

Я хочу назвать этот класс по:

first class1 = new first(10);

Почему это не работает?Как инициализировать массив по размеру из конструктора ??

Ответы [ 2 ]

4 голосов
/ 06 января 2012

Только этого достаточно:

first class1(10);

new для того, когда вы выделяете указатель.

first *class1 = new first(10);

Кроме того, у вас есть несовместимость здесь:

array = new int[x][10];

array - это int*, но new int[x][10] - это двумерный массив.Я не уверен, какой вы хотите.

Для массива 1D:

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

Для массива 2D:

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

Тем не менее, вам может быть лучше использовать std::vector.


Примечание: Поскольку у вас есть выделение памяти вконструктор, вы также должны реализовать деструктор, конструктор копирования и оператор присваивания копии .

2 голосов
/ 06 января 2012

Вы указали, что хотите получить одномерный массив (int*), но попытались выделить двумерный массив (new [x][10]).

Я предполагаю, что вам нужно одно измерение.

C ++ способ сделать это с помощью vector.

#include <vector>

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

   public:
   explicit first(int x) : array(x) {
   }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...