Я искал ответ на StackOverlow, но не нашел его, поэтому надеюсь, что это не дублирование какого-либо сообщения здесь.
Итак, у меня есть следующая проблема.
допустим, у меня есть следующие 2 класса: Rectangle (который построен из другого класса, но в настоящее время нас это не касается) и Grid< /сильный>. с ними следующие конструкторы:
(Конструктор точек для прямоугольника private topLeft и bottomRight):
Point::Point(int x, int y) {this->x = x; this->y = y;}
(Конструктор прямоугольника и класс)
class Rectangle
{
public:
Rectangle(int l, int u, int w, int h, int color);
//int getColor() const;
//void setColor(int color);
//bool contains(const Point &p) const;
//void print() const;
private:
const Point topLeft, bottomRight;
int color;
};
Rectangle::Rectangle(int l, int u, int w, int h, int color) :
topLeft(l, u),
bottomRight(l + w, u + h)
{ this->color = color; }
(Конструктор сетки и класс) (Предположим, я не хочу инициализировать значения прямоугольника в сетке, просто выделяю их в памяти)
class Grid
{
public:
Grid(int tileW, int tileH, int width, int height, int color);
//~Grid();
//Rectangle& getRectAt(const Point &p);
//void print() const;
private:
int count;
Rectangle **recs;
};
Grid::Grid(int tileW, int tileH, int width, int height, int color)
{
int index, index_c=0;
recs = new Rectangle *[width];
for (int index = 0; index < width; index++)
{
recs[index] = new Rectangle[index];
}
}
Итак, как вы понимаете, у меня проблема в конструкторе сетки со следующей ошибкой
(Ошибка 1, ошибка C2512: «Прямоугольник»: нет подходящего конструктора по умолчанию.)
но я просто не могу понять, почему это не сработает, я Было предложено выделить двойной указатель Recs как одномерный массив (массив с длиной Width * Height), но что, если Recs был четырехмерным массивом? Как вы могли бы правильно сгладить его, а затем индексировать вокруг 4-мерного массива, не имея головной боли, вычисляя индекс каждой ячейки в массиве.
другое дело, мы знаем, что если бы это был int**, а не rec**, он работал бы отлично
int **foo;
int height,width;
foo = new int* (height);
for (int index = 0; index<height; ++index)
foo[index] = new int[width];
поэтому я просто продолжаю скучать по способу создания n-мерных массивов в C++.
Rectangle
, ни конструктора, который принимает целое число в качестве параметра. Кроме того, я предлагаю вместо этого использоватьstd::vector
s. - person Marco A.   schedule 25.11.2016