Ошибка возникает из-за неправильного способа передачи двумерного массива в функцию. В C++, двумерный массив не может быть напрямую преобразован в указатель на указатель (т.е. `int**`). Прежде всего, давайте исправим вашу функцию и способ передачи массива.
Вот как это можно сделать:
1. Передайте массив как `int (*)[height]` в функцию.
2. Объявите массив в функции как `int (*arr)[height]`.
// Изменяем сигнатуру функции
void Draw_road(int *width, int *height, int (*arr)[110])
{
for(int i = 0; i < *width; i++)
{
for(int j = 0; j < *height; j++)
{
arr[j] = '0';
}
}
}
int main()
{
int width = 11, height = 110;
int arr[11][110]; // Используем значения вместо переменных для размера массива
int *widthPTR;
widthPTR = &width;
int *heightPTR;
heightPTR = &height;
// Передаем массив как указатель на массив
Draw_road(&width, &height, arr);
Обратите внимание на следующие моменты:
- Размер массива должен быть указан явно, так как массивы в C++ должны быть статически определены.
- Функция `Draw_road` теперь принимает `int (*arr)[110]` вместо `int **arr`.
- Внутри функции используются указатели, чтобы манипулировать элементами массива.
Этот код должен работать корректно и выполнять вашу задачу.
В C++ двумерный массив и указатель на указатель (int**) - это разные типы данных. Вот несколько способов решить эту проблему:
Изменить объявление функции и использовать ссылку на двумерный массив: void Draw_road(int *width, int *height, int (&arr)[11][110])
{
for(int i = 0; i < *width; i++)
{
for(int j = 0; j < *height; j++)
{
arr[j] = '0';
}
}
}
int main()
{
int width = 11, height = 110;
int arr[11][110];
Draw_road(&width, &height, arr);
// ...
} Использовать шаблон для функции: template
void Draw_road(int *width, int *height, int (&arr)[W][H])
{
for(int i = 0; i < *width; i++)
{
for(int j = 0; j < *height; j++)
{
arr[j] = '0';
}
}
}
int main()
{
int width = 11, height = 110;
int arr[11][110];
Draw_road(&width, &height, arr);
// ...
} Использовать одномерный массив вместо двумерного: void Draw_road(int *width, int *height, int *arr)
{
for(int i = 0; i < *width; i++)
{
for(int j = 0; j < *height; j++)
{
arr[i * (*height) + j] = '0';
}
}
}
int main()
{
int width = 11, height = 110;
int arr[11 * 110];
Draw_road(&width, &height, arr);
// ...
} Использовать std::vector вместо обычного массива: #include