微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:无法将“int* (*)[10]”转换为“const int* (*)[10]”

如何解决错误:无法将“int* (*)[10]”转换为“const int* (*)[10]”

我在将非 const 二维指针数组作为函数的 const 参数传递时遇到问题。但我收到一个错误。我不明白为什么。

// Online C++ compiler to run C++ program online
#include <iostream>

void test(const int  *arrayPtr[][10]){}
//void test(int  * const arrayPtr[][10]){//Works DO NOT USE //}

int main() {
 int *arrayPtr[10][10] = {};
 test(arrayPtr);
 std::cout <<"done" << std::endl;
 return 0;
}

g++ /tmp/JYRlXRFoja.cpp /tmp/JYRlXRFoja.cpp: In function 'int main()': /tmp/JYRlXRFoja.cpp:11:7: error: cannot convert 'int* (*)[10]' to 'const int* (*)[10]'    11 |  test(arrayPtr);
      |       ^~~~~~~~
      |       |
      |       int* (*)[10] /tmp/JYRlXRFoja.cpp:5:42: note:   initializing argument 1 of 'void test(const int* (*)[10])'
    5 | void test(const int                     *arrayPtr[][10]){
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~

解决方法

您的代码中有两个错误。

  1. 您传入的是 int* array[][],而不是 const int* array[][]。因此将函数参数更改为 int* array[][10]
  2. 您受到array decay的约束。要解决此问题,您应该通过引用传入数组。为此,您的函数参数应如下所示:int* (&arrayPtr)[][10]

您的错误是不言自明的,它说明出了什么问题。如果您仔细阅读,它会说您将 int* (*)[10] 传递给 const int* (*)[10] 类型的容器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。