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;
}
答案 0 :(得分:1)
std::list<int>
不等同于数组int arr[]
,因此,您没有leftRotate
函数接受std::list<int>
,编译器将引发此错误。
为了解决这个问题,根据您的项目需要,您要么必须进行更改:
int l[5] = { 1, 2, 3, 4,5};
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);
}