程序无法编译:将 'int (*)[3][3]' 赋值为 'int [9][3][3]' 中的不兼容类型

Program does not compile: incompatible types in assignment of ‘int (*)[3][3]’ to ‘int [9][3][3]’

本文关键字:int 不兼容 类型 赋值 编译 程序      更新时间:2023-10-16

我有一个类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!

我认为该错误可能与数组本身是一个指针这一事实有关,因此它可能会干扰类型,但是鉴于构造函数的参数类型dataadata的类型相同,代码看起来应该可以工作。任何帮助,不胜感激。

数组参数衰减为指针,因此参数中 int (=int data[9][3][3]( 的数组 3 的数组 9 变为指向 int 的数组 3 的数组 3 的指针 (=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)