c++ - 错误 : no match for 'operator[]'

标签 c++ codeblocks

我正在解决一个问题,在这个问题中,我试图将地址传递给一个结构的二维数组并尝试对其进行操作,但是,每当我使用 [] 运算符访问数组元素时,我收到编译时错误:

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/

相关文章:

python - 使用 Cython 包装 C++ 模板以接受任何 numpy 数组

c++ - 生成由字母和数字组成的随机单词

c - 如何在代码:blocks build?中包含文件

c - 项目无法在 Codeblocks IDE 中链接

c++从c'tor返回+用于错误处理的默认返回值

c++ - 面试 - 在数组中找到偶数和对

c++ - 释放内存二叉树

c++ - Blowfish 和 undefined reference `BF_set_key'

c++ - 构建后打开任何窗口 C++

c++ - Code::Blocks 进程以状态 1 终止