C++ 错误:一元‘;的类型参数无效*’;(have‘;int’;):在使用mergesort计算数组中的反转数时

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

我正试图编写这段代码来使用合并排序技术计算数组中的反转数。我引用了他的参考资料。即使我没有显式地使用指针,我也会遇到这个错误

错误:一元“*”的类型参数无效(具有“int”)

下面是我的代码

#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)
{
   //...
}