为什么我收到预期的标识符错误

编译时出现此错误:

tidemantest.c:34:27:错误:预期的标识符     无效的mergesort(pairs,0,pair_count-1);                           ^ 谁能告诉我为什么?谢谢!

这是我的最小可重现示例(该赋值据说不会更改sort_pairs的函数声明,因此我将mergesort函数放入其中。主要函数调用sort_pairs):

#include <cs50.h>
#include <stdio.h>
#include <string.h>

// Max number of candidates
#define MAX 9

// preferences[i][j] is number of voters who prefer i over j
int preferences[MAX][MAX];

// Each pair has a winner, loser
typedef struct
{
    int winner;
    int loser;
}
pair;

// Array of candidates
string candidates[MAX];
pair pairs[MAX * (MAX - 1) / 2];

int pair_count;
int candidate_count;

// Function prototypes
void sort_pairs(void);
void mergesort(int a[], int s, int e);
void merge(int *a, int s, int e);

// Sort pairs in decreasing order by strength of victory
void sort_pairs(void)
{
    void mergesort(pairs, 0, pair_count - 1);
    return;
}

void mergesort(int a[], int s, int e)
{
    if (s >= e)
    {
        return;
    }

    int mid = (s + e) / 2;

    mergesort(a, s, mid);
    mergesort(a, mid + 1, e);

    merge(a, s, e);
}

void merge(int *a, int s, int e)
{
    int mid = (s + e) / 2;

    int i = s;
    int j = mid + 1;
    int k = s;

    int temp[100];

    while (i <= mid && j <= e)
    {
        if (preferences[pairs[i].winner][pairs[i].loser] < preferences[pairs[j].winner][pairs[j].loser])
        {
            temp[k++] = a[i++];
        }
        else
        {
            temp[k++] = a[j++];
        }
    }
    while (i <= mid)
    {
        temp[k++] = a[i++];
    }
    while (j <= e)
    {
        temp[k++] = a[j++];
    }

    for(i = s; i <= e; i++)
    {
        a[i] = temp[i];
    }
}
评论
  • 看!灰鸡
    看!灰鸡 回复

    该错误通常表示预期的括号或其他语法,编译器无法理解您的意思。 在这里:

    // Sort pairs in decreasing order by strength of victory
    void sort_pairs(void)
    {
        void mergesort(pairs, 0, pair_count - 1);
        return;
    }
    

    使用void表示声明,并且编译器认为您没有在其后面加上花括号来完成函数声明。删除“空”,它应该工作。