В классе я хочу создать массив (предопределенный, потому что он находится в классе заголовка) без указания границ, пока в классе не будет создан объект с его типом.
Например:
class RandomClass{
public:
int myarray[][];//Remember this is a 2D array, 1D arrays can be defined like this.
}
(Этот класс неполный, я знаю, просто притворись, что нет)
Очевидно, это не работает, потому что «мне не разрешено создавать массив без определения его границ»
Итак, мой вопрос, как я могу это сделать?
Или, может быть, как создать массив внутри конструктора класса, который будет доступен для всех членов класса.
Для небольшого количества информации о том, почему я хочу сделать это;
Я пытаюсь создать класс, который обрабатывает карты для 2D-игры, когда класс будет создан, ему будет задан размер карты через параметры его конструктора, а затем будет создан массив, так что он не должен быть каким-либо больше, чем размер самой карты.
Я знаю, что мог бы использовать векторы, однако мне трудно сделать их двухмерными. (Если вы ответите на мой вопрос, пожалуйста, ответьте сначала на главный вопрос, не говорите мне, как использовать вектор в этой ситуации — однако это также будет полезно)
Я опубликую ошибку, хотя причин для этого нет.
ошибка: объявление ‘myarray’ как многомерного массива должно иметь
оценки для всех размеров, кроме первого
Ответ на первый вопрос
int** myarray;
тогда в вашем конструкторе
RandomClass(int rows, int cols)
{
myarray = new int*[rows];
for (int i = 0; i < rows; ++i)
myarray[i] = new int[cols];
}
Ответ на второй вопрос
vector< vector<int> > myvector;
2D-вектор — это просто вектор векторов, тогда в вашем конструкторе
RandomClass(int rows, int cols) : myvector(rows, vector<int>(cols))
{
}
Других решений пока нет …