推导出参数“_BIter”的冲突类型('int*' 和 'int')
deduced conflicting types for parameter '_BIter' ('int*' and 'int')
我正在尝试实现一个简单的反向数组函数:
void reverse(int (&arr)[], int n)
{
int start = 0, end = n - 1;
while (start <= end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
在我的 main() 中我有这个:
int brr[9]{10, 20, 30, 40, 50, 60, 70, 80, 90};
for (int i = 0; i < 9; i++)
{
cout << brr[i] << " ";
}
cout << endl;
reverse(brr, 9);
for (int i = 0; i < 9; i++)
{
cout << brr[i] << " ";
}
我怎么也弄不明白为什么会出现这个错误:
no matching function for call to 'reverse(int [9], int)'
65 | reverse(brr, 9);
no known conversion for argument 1 from 'int [9]' to 'int (&)[]'
12 | void reverse(int (&arr)[], int n)
deduced conflicting types for parameter '_BIter' ('int*' and 'int')
65 | reverse(brr, 9);
我想知道这是什么行为以及如何纠正它?
谢谢!
在此函数声明中:
void reverse(int (&arr)[], int n);
arr
的类型是对未知边界数组的引用。但是,参数 brr
的类型为 int [9]
,您不能将未知边界数组的引用绑定到已知边界数组。
您有多种选择:
- 您可以将数组衰减为指针:
void reverse(int *arr, int n);
这确实意味着您需要将大小传递给函数,并且您必须确保您获得正确的大小,否则您可能会调用未定义的行为。
- 您可以使
arr
成为一个包含 9 个整数的数组的引用。
void reverse(int (&arr)[9]);
请注意,n
在这里毫无意义,因为大小是固定的,因此您可以删除第二个参数。这确实意味着您也可以使用大小为 9 的数组调用此函数。
- 我推荐的方法是制作
reverse
模板,并推断数组的大小。
template<int n>
void reverse(int (&arr)[n]);
这样做的好处是 n
可以变化,即这适用于任何大小的数组。此外,您不需要在调用函数时将大小传递给它,因为它会被推导。
我正在尝试实现一个简单的反向数组函数:
void reverse(int (&arr)[], int n)
{
int start = 0, end = n - 1;
while (start <= end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
在我的 main() 中我有这个:
int brr[9]{10, 20, 30, 40, 50, 60, 70, 80, 90};
for (int i = 0; i < 9; i++)
{
cout << brr[i] << " ";
}
cout << endl;
reverse(brr, 9);
for (int i = 0; i < 9; i++)
{
cout << brr[i] << " ";
}
我怎么也弄不明白为什么会出现这个错误:
no matching function for call to 'reverse(int [9], int)'
65 | reverse(brr, 9);
no known conversion for argument 1 from 'int [9]' to 'int (&)[]'
12 | void reverse(int (&arr)[], int n)
deduced conflicting types for parameter '_BIter' ('int*' and 'int')
65 | reverse(brr, 9);
我想知道这是什么行为以及如何纠正它?
谢谢!
在此函数声明中:
void reverse(int (&arr)[], int n);
arr
的类型是对未知边界数组的引用。但是,参数 brr
的类型为 int [9]
,您不能将未知边界数组的引用绑定到已知边界数组。
您有多种选择:
- 您可以将数组衰减为指针:
void reverse(int *arr, int n);
这确实意味着您需要将大小传递给函数,并且您必须确保您获得正确的大小,否则您可能会调用未定义的行为。
- 您可以使
arr
成为一个包含 9 个整数的数组的引用。
void reverse(int (&arr)[9]);
请注意,n
在这里毫无意义,因为大小是固定的,因此您可以删除第二个参数。这确实意味着您也可以使用大小为 9 的数组调用此函数。
- 我推荐的方法是制作
reverse
模板,并推断数组的大小。
template<int n>
void reverse(int (&arr)[n]);
这样做的好处是 n
可以变化,即这适用于任何大小的数组。此外,您不需要在调用函数时将大小传递给它,因为它会被推导。