我正在解决一个问题,在这个问题中,我试图将地址传递给一个结构的二维数组并尝试对其进行操作,但是,每当我使用 []
运算符访问数组元素时,我收到编译时错误:
no match for 'operator[]'
在我的代码块 IDE 中。
#include <iostream>
using namespace std;
typedef struct mat
{
int data;
int flag;
} cell;
int mat(cell *);
int main()
{
int m,n;
cin>>m>>n;
cell game[n][m];
cout<<"The length of matrix is "<<mat(&game[0][0]);
}
int mat(cell *arr)
{
return (sizeof(arr[0])/sizeof(arr[0][0]));
}
最佳答案
cell game[n][m];
这不是合法的 C++。您正在使用特定于编译器的扩展。在这一点上,我建议您不要使用任何特定于编译器的扩展。仅使用标准 C++。在标准 C++ 中,没有可变长度数组。不要在 C++ 程序中使用数组。获得适当的可变长度数组功能。您应该改用 std::vector
,如下所示:
std::vector<std::vector<cell>> game;
更进一步,
&game[0][0]
不是二维数组的地址。这是数组中第一个元素的地址。它不包含有关元素数量的信息。它永远丢失了。您不能将它传递给某个函数并期望恢复数组的大小。要使用内置大小函数获得适当的数组功能,请使用 std::vector
。
最后但同样重要的是,
(sizeof(arr[0])/sizeof(arr[0][0]));
arr
是一个cell*
。 arr[0]
是一个单元格
。 arr[0][0]
无效,因为 cell
既不是数组也不是指针,也没有定义自定义的 []
运算符.在任何情况下,您都不能使用 sizeof
从指向其第一个元素的指针恢复数组中的元素数。要使用内置大小函数获得适当的数组功能,请使用 std::vector
。
关于c++ - 错误 : no match for 'operator[]' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058440/