Попытка передать массив функции приводит к передаче указателя на первый элемент массива.
Вы не можете назначать массивы, а принятие параметра типа T[]
такое же, как T*
. Так
*state = *arr;
Разыменовывает указатели на state
и arr
и присваивает первый элемент arr
первому элементу state
.
Если вы хотите скопировать значения из одного массива в другой, вы можете использовать std::copy
:
std::copy(arr, arr + 64, state); // this assumes that the array size will
// ALWAYS be 64
В качестве альтернативы вы должны посмотреть на std::array<int>
, который ведет себя точно так же, как вы предполагали, что массивы ведут себя:
#include <array>
#include <algorithm>
#include <iostream>
class board
{
public:
std::array<int, 64> state;
board(const std::array<int, 64> arr) // or initialiser list : state(arr)
{
state = arr; // we can assign std::arrays
}
void print();
};
void board::print()
{
for (int y=0; y<8; y++)
{
for (int x=0; x<8; x++)
std::cout << state[x + y*8] << " ";
std::cout << "\n";
}
}
int main()
{
// using this array to initialise the std::array 'test' below
int arr[] = {
0, 1, 2, 3, 4, 5, 6, 7,
1, 2, 3, 4, 5, 6, 7, 8,
2, 3, 4, 5, 6, 7, 8, 9,
3, 4, 5, 6, 7, 8, 9,10,
4, 5, 6, 7, 8, 9,10,11,
5, 6, 7, 8, 9,10,11,12,
6, 7, 8, 9,10,11,12,13,
7, 8, 9,10,11,12,13,14 };
std::array<int, 64> test(std::begin(arr), std::end(arr));
board b(test);
b.print();
std::cin.get();
return 0;
}