错误:'operator []'不匹配

时间:2015-10-10 20:04:38

标签: c++ codeblocks

我正在解决一个问题,我试图传递一个结构的二维数组并尝试操作它但是,每当我使用#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])); } 运算符访问数组元素时,我得到一个编译时间错误:

  

不匹配'operator []'

在我的代码块IDE中。

{{1}}

3 个答案:

答案 0 :(得分:2)

cell game[n][m];

这不是合法的C ++。您正在使用特定于编译器的扩展。此时我建议您不要使用任何特定于编译器的扩展。仅使用标准C ++。在标准C ++中,没有可变长度数组。不要在C ++程序中使用数组。获得适当的可变长度数组功能。您应该使用std::vector代替,如下所示:

std::vector<std::vector<cell>> game;

此外,

&game[0][0]

不是2D数组的地址。这是数组中第一个元素的地址。它不包含有关元素数量的信息。它永远失去了。您无法将其传递给某个函数,并期望恢复数组的大小。要使用内置大小函数获得正确的数组功能,请使用std::vector

最后但并非最不重要的,

(sizeof(arr[0])/sizeof(arr[0][0]));

arrcell*arr[0]cellarr[0][0]无效,因为cell既不是数组也不是指针,也没有定义自定义[]运算符。在任何情况下,您都不能使用sizeof从指向其第一个元素的指针中恢复数组中的元素数。要使用内置大小函数获得正确的数组功能,请使用std::vector

答案 1 :(得分:1)

两件事:

  1. 您的函数会指向cell,但由于您将其视为2D数组,因此您应该将签名更改为接受cell ** arr或{{{ 1}}其中cell arr[m][]是数组的(固定)大小,必须指定。请注意,这些数据结构在内存中具有根本不同的表示形式 - 它们只具有相同的m语法来访问元素。

  2. 如果将数组作为指向elem的指针传递,则无法使用[][]函数来确定数组的长度。您需要将维度与数组一起传递,如下所示:

  3. sizeof

答案 2 :(得分:0)

给出的定义基本上表示您的类没有定义operator [],这意味着您不能使用您尝试使用的语法。