C++ 错误:一元‘;的类型参数无效*’;(have‘;int’;):在使用mergesort计算数组中的反转数时
我正试图编写这段代码来使用合并排序技术计算数组中的反转数。我引用了他的参考资料。即使我没有显式地使用指针,我也会遇到这个错误 错误:一元“*”的类型参数无效(具有“int”) 下面是我的代码C++ 错误:一元‘;的类型参数无效*’;(have‘;int’;):在使用mergesort计算数组中的反转数时,c++,arrays,pointers,debugging,mergesort,C++,Arrays,Pointers,Debugging,Mergesort,我正试图编写这段代码来使用合并排序技术计算数组中的反转数。我引用了他的参考资料。即使我没有显式地使用指针,我也会遇到这个错误 错误:一元“*”的类型参数无效(具有“int”) 下面是我的代码 #include <bits/stdc++.h> using namespace std; int mergeSort(int arr[], int temp[], int l, int r){ int invcount = 0; if(l<r){ in
#include <bits/stdc++.h>
using namespace std;
int mergeSort(int arr[], int temp[], int l, int r){
int invcount = 0;
if(l<r){
int m = (l+r)/2;
invcount += mergeSort(arr, temp, l, m);
invcount += mergeSort(arr, temp, m+1, r);
invcount += merge(arr, temp, l, m, r);
}
return invcount;
}
int merge(int arr[], int temp[], int l, int m, int r){
int invcount = 0;
int k = l;
int i = l, j = m+1;
while(true){
if(i>m){
while(j<=r){
temp[k] = arr[j];
k++;
j++;
}
break;
}
else if(j>r){
while(i<=m){
temp[k] = arr[i];
k++;
i++;
}
break;
}
if(arr[i] > arr[j]){
temp[k] = arr[j];
k++;
j++;
invcount += m-i+1;
}
else{
temp[k] = arr[i];
k++;
i++;
}
}
for(i=l; i<=r; i++){
arr[i] = temp[i];
}
return invcount;
}
int main(int argv, char** args)
{
// int arr[] = {1, 20, 6, 4, 5};
int arr[] = {2, 4, 1, 3, 5};
int n = sizeof(arr)/sizeof(arr[0]);
int *temp = new int[n];
printf(" Number of inversions are %d \n", mergeSort(arr, temp, 0, n-1));
// getchar();
return 0;
}
#包括
使用名称空间std;
整数合并排序(整数arr[],整数temp[],整数l,整数r){
int invcount=0;
if(lm){
while(jr){
而(i arr[j]){
温度[k]=arr[j];
k++;
j++;
invcount+=m-i+1;
}
否则{
温度[k]=arr[i];
k++;
i++;
}
}
对于(i=l;i,问题很可能是您使用了#include
和调用merge
问题在于
标题中定义了一个函数,而
标题包含
使用命名空间std;
使问题进一步复杂化。实际上,您正试图调用std::merge
而不是自己的merge
函数,这一切都是由于std
名称空间被引入到您的程序中。std::merge
函数需要的参数类型与您传递给自己的merge
函数的参数类型不同函数,因此错误
解决方案——停止使用<代码>包含< /COD>。包括适当的、标准的C++头,而不是这个头。正确的标题是:
#include <cstdio>
或者将整个合并
函数实现移动到合并排序
函数之前。您可以标记错误发生时的行吗#include
--。包括正确的标题。更好阅读。问题很可能是关于使用愚蠢的“位”头而不是真正的头,弄乱了merge
函数。告诉我们错误发生在哪里如何?编译并在我的机器上运行。没有错误。修改代码以修复一些警告,因此编译时没有警告。非常感谢,@PaulMcKenzie。这与您所说的问题完全相同。程序正在调用std::merge
而不是我自己的merge。我通过更改函数名检查了它,它工作正常。我想我最好停止使用“bits”头,开始使用正确的头。再次感谢。在mergeSort之前没有声明merge函数是一个愚蠢的错误。:p
// declare the merge() function here
int merge(int arr[], int temp[], int l, int m, int r);
int mergeSort(int arr[], int temp[], int l, int r)
{
int invcount = 0;
if(l<r) {
int m = (l+r)/2;
invcount += mergeSort(arr, temp, l, m);
invcount += mergeSort(arr, temp, m+1, r);
invcount += merge(arr, temp, l, m, r);
}
return invcount;
}
// implement merge() here
int merge(int arr[], int temp[], int l, int m, int r)
{
//...
}