首页 > 解决方案 > 我收到一个“错误:编译时没有匹配的函数调用‘leftRotate’

问题描述

using namespace std;

void leftRotate(int arr[]){

    unsigned int n = sizeof(arr)/sizeof(arr[0]);

    for(int i = 0; i < n; i++){
        cout<<"Value: " << arr[i] << endl;
    }
}


//function declaration

void leftRotate(int arr[]);

int main(){

    std::list<int> l = {1,2,3,4,5};

    leftRotate(l);

    return 0;
}

标签: c++arrayspointers

解决方案


std::list<int>不等于 array int arr[],因此,您没有leftRotate接受编译器的函数会std::list<int>引发此错误。

为了解决这个问题,根据您的项目需要,您要么必须更改:

  • l 到 int 的声明int l[5] = { 1, 2, 3, 4,5};
  • 或者 leftRotate 定义和声明到void leftRotate(std::list<int> arr).

注意:如评论中所述。与许多其他语言不同,在 C 和 C++ 中,您需要明确如何将参数传递给函数,或者通过将数据结构及其中的所有内容复制到新实例(按值传递),或者通过传递指针或引用原始实例(通过引用传递)。在您的情况下,后一个选项更明智,但是您拥有的代码和建议的内容是实现第一个选项。有关更多介绍性信息https://www.geeksforgeeks.org/parameter-passing-techniques-in-c-cpp/


推荐阅读