这段代码有问题吗?我无法让它工作。请帮帮我

时间:2021-04-10 15:17:42

标签: c++ function pointers

目的是对用户输入的分数进行排序、显示和平均。 我还没有弄清楚。 如果你已经解决了这个问题,请帮忙。 到目前为止,我已经尝试过这段代码,但它不起作用。

createWebHashHistory()

我从这段代码中得到的只是一个编译器错误。 有没有人有什么建议?请和谢谢。

3 个答案:

答案 0 :(得分:0)

您将 sortArr 定义为将指向 int 的指针数组作为其参数,但您传递给它的是实际的 int 数组。听起来后者才是你真正想要的,所以你需要重写 sortArr 才能在 int 的数组上正常工作,首先将定义更改为

void sortArr(int arr[], int SIZE) {
...
}

没有 *。这也意味着该函数中的大部分 * 取消引用将被删除。

答案 1 :(得分:0)

要添加到 Nate 的答案之上,请将指向数组的指针传递给 sortArr 。编译器将数组“转换”为指针。

void sortArr(int* arr, int SIZE) {
...
}

还有更精细的方法来检查输入错误。用你的心内容

while(!(cin >> size) || size < 0 || size == 0)
{
// Error message
cin.clear();
// A huge constant
cin.ignore(999,'\n');
}

答案 2 :(得分:0)

正如其他人指出的那样,您对 sortArr() 的声明与定义不符。

声明:

void sortArr(int [], int);

定义:

void sortArr(int *arr[], int SIZE) {...}

如您所见,定义表示 sortArr() 接受 int 数组和 int 数组的参数。但是,您的定义表明 sortArr() 采用 int* 数组和 int 数组的参数。编译器得出结论,它们一定是不同的函数。

当编译器尝试编译时,它与您的声明一致,但找不到定义。您可以按照其他人所做的来修复它,我也会在这里列出:

首先将sortArr()的声明改为

void sortArr(int*, int);

int[] 可以转换为 int*,所以这就是我们所需要的。

接下来,转到 sortArr() 的定义,并更改它。 (评论解释了原因)


void sortArr(int* arr, int SIZE) //we only need a pointer, as it is basically the same thing as an array
{
    int startScan, minIndex;
    int minElem; //if minElem was a pointer, it would get overwritten every time by arr, so use a regular int

    for (startScan = 0; startScan < (SIZE - 1); startScan++)
    {
        minIndex = startScan;
        minElem = arr[startScan];
        for (int index = startScan + 1; index < SIZE; index++)
        {
            if (arr[index]/*No need for dereferencer here, because indexing already dereferences.*/ < minElem)
            {
                minElem = arr[index];
                minIndex = index;
            }
        }
        arr[minIndex] = arr[startScan];
        arr[startScan] = minElem;
    }
    cout << "Here are the scores you entered, sorted in ascending order: " << endl;
    for (int count = 0; count < SIZE; count++)
        cout << arr[count] << " "; //Again, no dereferencing here because we are using the [] operator
    cout << endl;
}

我已经针对多种情况测试了此代码,并且它有效。希望这有帮助!