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

时间:2014-03-23 19:43:56

标签: 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();

}

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

3 个答案:

答案 0 :(得分:5)

在使用函数之前,必须(至少)声明函数。将swapValues的定义移到sortValues之上或写一个声明:

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

void sortValues(int *i, int *j) {
// etc...

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

swapValues(&values[i], &values[j]);

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

swapValues(values+i, values+j);

答案 1 :(得分:2)

必须在sortValues()函数之前声明

swapValues()函数。

答案 2 :(得分:1)

将调用swapValues的程序更改为

swapValues(&values[i], &values[j]);