Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用typedef、多维数组和指针时出现编译器错误_C++_Pointers_Multidimensional Array_Typedef - Fatal编程技术网

C++ 使用typedef、多维数组和指针时出现编译器错误

C++ 使用typedef、多维数组和指针时出现编译器错误,c++,pointers,multidimensional-array,typedef,C++,Pointers,Multidimensional Array,Typedef,我在编译以下代码时遇到问题。编译器声明: Assigning to 'RawChunk::Ptr' (aka 'unsigned char (*)[128][16]') from incompatible type 'RawChunk::Chunk *' (aka 'unsigned char (*)[16][128][16]'); 有人知道我做错了什么吗?这似乎是一个简单的错误,但我不确定我应该改变什么 template <int dim> class RawChunkWindo

我在编译以下代码时遇到问题。编译器声明:

Assigning to 'RawChunk::Ptr' (aka 'unsigned char (*)[128][16]') from incompatible type 'RawChunk::Chunk *' (aka 'unsigned char (*)[16][128][16]');
有人知道我做错了什么吗?这似乎是一个简单的错误,但我不确定我应该改变什么

template <int dim>
class RawChunkWindow {
public:
    typedef unsigned char (*Ptr)[ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
    typedef unsigned char Chunk[ChunkDimensions::MAX_X][ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
    RawChunkWindow() {
        for (int i = 0; i < dim; ++i) {
            for (int j = 0; j < dim; ++j) {
                window[i][j] = &payload[i][j]; //compiler complains here
            }
        }
    }
private:
    Ptr window[dim][dim];
    Chunk payload[dim][dim];
};
模板
类窗口{
公众:
typedef unsigned char(*Ptr)[ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
typedef unsigned char Chunk[ChunkDimensions::MAX_X][ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
RawChunkWindow(){
对于(int i=0;i
RawChunkWindow
的构造函数中截取的代码来看,
Ptr
类型应该是指向
Chunk
类型的指针,但是
typedef
声明没有反映这一点。相反,
Ptr
是指向
char
类型的二维数组的指针,而不是指向三维数组的指针

因此,改变这一点:

typedef unsigned char (*Ptr)[ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
为此:

typedef unsigned char (*Ptr)[ChunkDimensions::MAX_X][ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
这也是您的错误代码报告的内容。
无符号字符(*)[128][16]
是指向128x16二维数组的指针,编译器抱怨您试图将三维16x128x16数组指针右值(即
无符号字符(*)[16][128][16]
右值)分配给错误的指针类型


作为侧节点,如果计划在堆栈上使用此对象,请注意如何声明此对象。如果维度为16x128x16,则单个
类型实例将占用32Kb,如果从
RawChunkWindow
的构造函数中截取的代码中传递太大的值作为
dim

的模板参数,则这些实例的二维数组可能会很快占用堆栈空间,看起来您的
Ptr
类型应该是指向
Chunk
类型的指针,但是您的
typedef
声明没有反映这一点。相反,
Ptr
是指向
char
类型的二维数组的指针,而不是指向三维数组的指针

因此,改变这一点:

typedef unsigned char (*Ptr)[ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
为此:

typedef unsigned char (*Ptr)[ChunkDimensions::MAX_X][ChunkDimensions::MAX_Y][ChunkDimensions::MAX_Z];
这也是您的错误代码报告的内容。
无符号字符(*)[128][16]
是指向128x16二维数组的指针,编译器抱怨您试图将三维16x128x16数组指针右值(即
无符号字符(*)[16][128][16]
右值)分配给错误的指针类型


作为侧节点,如果计划在堆栈上使用此对象,请注意如何声明此对象。如果维度为16x128x16,则单个
类型实例将占用32Kb,如果您将太大的值作为
dim

的模板参数传递,则二维数组可能会很快占用堆栈空间,如果您没有进一步解释您打算执行的操作,我不能确定,但似乎您可能对成员变量使用了不正确的类型。具体而言,成员变量窗口的类型为:

窗口:大小数组
dim
大小数组
dim
指向
MAX_Y
无符号字符数组的指针数组,即指向二维数组的指针的二维数组


有效载荷:大小数组
dim
大小数组
dim
大小数组
MAX\ux
大小数组
MAX\uy
大小数组
MAX\uz
,即一个5维数组。

如果不进一步解释你打算做什么,我真的不能确定,但似乎您可能对成员变量使用了不正确的类型。具体而言,成员变量窗口的类型为:

窗口:大小数组
dim
大小数组
dim
指向
MAX_Y
无符号字符数组的指针数组,即指向二维数组的指针的二维数组


有效负载:大小数组
dim
大小数组
dim
大小数组
MAX\u X
大小数组
MAX\u Y
大小数组
MAX\u Z
,即一个5维数组。

要消除当前存在的错误,需要更改行:

窗口[i][j]=&有效载荷[i][j]

窗口[i][j]=&有效载荷[i][j][x]


对于某些小于“ChunkDimensions::MAX_x”的“x”。但是,我不清楚您想做什么,上面的修复几乎肯定不是(可能)。简单地说,您可能试图在一个集合(有效负载)中存储一个3D数组集合,并且由于3D数组实际上只是一个2D数组的数组,因此您尝试在另一个集合(窗口)中存储指向每个2D数组的指针。我甚至不会在这里使用“dim”,因为这种情况已经足够让人头疼了。在任何情况下,使用“std::vector”而不是原始的c样式数组都会容易得多。为了更好地理解一般使用c样式数组的问题(如果出于某种原因不能使用“std::vector”),请参阅我之前对和的回答。您可以将我介绍的概念扩展到3D阵列。

要以当前的方式消除错误,您需要更改行:

窗口[i][j]=&有效载荷[i][j]

窗口[i][j]=&有效载荷[i][j][x]

对于某些小于“ChunkDimensions::MAX_x”的“x”。但是,我不清楚您想做什么,上面的修复几乎肯定不是(可能)。简单地说,您可能试图在一个集合(有效负载)中存储一个3D数组集合,并且由于3D数组实际上只是一个2D数组的数组,因此您尝试存储指向每个数组的指针