Похоже, ваш класс пытается определить массив «указателей на int
», а не массив int
, как вы предлагаете. Однако классический ответ заключается именно в том, что вы используете «указатель на int
», выделяете массив в конструкторе и освобождаете его в деструкторе. В первом приближении:
class foo
{
public:
int *arr;
int s;
foo(int sz) : s(sz) { arr = new int [s]; }
~foo() { delete [] arr; }
};
Если вы собираетесь пойти по этому маршруту, вам также потребуется предоставить оператор присваивания и конструктор копирования (как мне напоминает Майк Сеймур - спасибо, Майк); Версии по умолчанию, которые компилятор напишет для вас, если вы не напишите их для себя, будут неправильными - ужасно неправильными. (ТАК вопрос «Что такое правило трех?» охватывает это.)
Тем не менее, это (вероятно) небезопасно, и вам будет лучше использовать std::vector<int>
вместо простого указателя:
class foo
{
public:
std::vector<int> arr;
foo(int sz) : arr(sz) { }
};
Вам не нужно явно хранить размер; вектор делает это за вас.