При вызове этой функции компилятор выдает ошибку
(не существует подходящего конструктора для преобразования из point(*)[20] в point).
int amount_of_alive_neighbours(point playground[_HEIGHT_][_WIDTH_], int x, int y)
{
int count = 0;
int neighbours[8][2];
int _x, _y;
neighbours_coordinates(neighbours, x, y);
for (int i = 0; i < 8; i++)
{
_x = neighbours[i][0];
_y = neighbours[i][1];
if (_x < 0 || _y < 0)
continue;
if (_x >= _WIDTH_ || _y >= _HEIGHT_)
continue;
if (playground[_x][_y].alive)
count++;
}
return count;
}
Вызываю так:
alive_neighbours = amount_of_alive_neighbours(previous_playground, i, j);
point - структура
struct point
{
bool alive:true;
}
Откуда вызываю функцию:
void next_playground(point new_playground[_WIDTH_][_HEIGHT_], point previous_playground[_WIDTH_][_HEIGHT_])
{
int alive_neighbours;
point pg;
for (int i = 0; i < _WIDTH_; i++)
for (int j = 0; j < _HEIGHT_; j++)
{
pg = previous_playground[i][j];
alive_neighbours = amount_of_alive_neighbours(previous_playground, i, j);
}
}
Ниже краткий пример законченного кода
#include "stdafx.h"
#define _HEIGHT_ 20
#define _WIDTH_ 20
struct point
{
bool alive : true;
};
int amount_of_alive_neighbours(point playground[_HEIGHT_][_WIDTH_], int x, int y)
{
return 1;
}
void next_playground(point new_playground[_WIDTH_][_HEIGHT_], point previous_playground[_WIDTH_][_HEIGHT_])
{
int alive_neighbours;
point pg;
for (int i = 0; i < _WIDTH_; i++)
for (int j = 0; j < _HEIGHT_; j++)
{
pg = previous_playground[i][j];
alive_neighbours = amount_of_alive_neighbours(previous_playground, i, j); //ERROR
}
}
int main()
{
point pg1[_WIDTH_][_HEIGHT_];
point pg2[_WIDTH_][_HEIGHT_];
next_playground(pg1, pg2);
}
Массивы с фиксированным размером в c++ передаются только по ссылке:
int foo(int (& array)[2][4]){
return sizeof(array);
}
int bar(){
int array[2][4];
return foo(array);
}
Или можно преобразовать в двойной указатель и передавать размер отдельно.
Лучше использовать std::array
для таких массивов.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок