Программа не компилирует: несовместимые типы в присваивании int (*) [3] [3] 'int [9] [3] [3]' - PullRequest
1 голос
/ 19 октября 2019

У меня есть класс board:

class board{
private:
    int data[9][3][3] = {};

public:
    board(int dataa[9][3][3]);
};

board::board(int dataa[9][3][3]){
    this->data = dataa; // error from title here!

Я думаю, что ошибка может быть связана с тем фактом, что массив сам по себе является указателем, поэтому он может мешать типам, но код выглядиткак и должно работать, учитывая, что тип аргумента конструктора dataa идентичен типу data. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 октября 2019

Параметр массива затухает до указателя, поэтому ваш массив 9 массива 3 массива 3 из int (= int data[9][3][3]) в параметре становится указателем на массив 3 массива 3 изint (= int (*data)[3][3]).

Но даже если это не так, C и C ++ не позволяют назначать массив массиву - вам нужно использовать memcpy (или копироватьчлен массива за членом, но memcpy часто более оптимален).

//this->data = dataa
std::memcpy(this->data, dataa, sizeof(*dataa) * 9); 
//^the innermost dimension got lost in the decay so specify it explicitly (9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...