我收到“错误:编译时没有匹配的函数来调用'leftRotate'

时间:2019-11-26 19:03:41

标签: c++ arrays pointers

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;
}

2 个答案:

答案 0 :(得分:1)

std::list<int>不等同于数组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/

答案 1 :(得分:1)

您的问题与void leftRotate的声明有关,因为它的输入是整数数组,而您将l声明为std::list<int>。为了使程序正常工作,您必须更改其中的一种(功能或数据),这意味着您一次只能使用一种类型。可能性是:

void leftRotate(int arr[]) {...}

int main()
{
    int l[] = {1, 2, 3, 4, 5};
    leftRotate(l);
}

void leftRotate(std::list<int> &s) {...}

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