接收函数"未在此范围内声明"的错误

Nic*_*ick -2 c++

我正在使用C++进行冒泡排序,并且我在将值作为指针传递时遇到问题.这是我的代码:

#include <iostream>
using namespace std;

int values[9] = {7, 3, 9, 4, 6, 1, 2, 8, 5};

void printValues(){
    for (int i=0; i<9; i++)
       cout<<values[i]<<endl;
}


void sortValues(){
    for(int i=0;i<9;i++){
        for(int j=0;j<8;j++){
            if (values[i]>values[j]){
                swapValues(values[i], values[j]);
                printValues();
            }
        }
    }
}

void swapValues(int *i, int *j){
    int temp = *i;
    *i = *j;
    *j = temp;
}

int main(){
    cout << "Before: " <<endl;
    printValues();
    sortValues();
    cout << "After: " <<endl;
    printValues();

}
Run Code Online (Sandbox Code Playgroud)

当我按原样运行代码时,收到错误消息:'swapValues'未在此范围内声明.我试过改变我添加星号的地方(swapValues(values [i],values [j]);)但这似乎让事情变得更糟.有任何想法吗?谢谢!

jro*_*rok 5

函数需要(至少)在使用之前声明.移动swapValues上面的定义sortValues或写一个声明:

void swapValues(int *i, int *j);

void sortValues(int *i, int *j) {
// etc...
Run Code Online (Sandbox Code Playgroud)

此外,作为swapValues指针,您需要在调用时获取数组元素的地址:

swapValues(&values[i], &values[j]);
Run Code Online (Sandbox Code Playgroud)

或者,因为数组衰减到指向它们的第一个元素,你可以使用指针算法而不是索引:

swapValues(values+i, values+j);
Run Code Online (Sandbox Code Playgroud)