首页 > 解决方案 > 如何解决 C 中多次定义交换的错误

问题描述

我从交换函数中收到错误“交换的多重定义”。此代码用于选择排序。

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

static void BiDirectionalSelectionSort(int arr[], int n)
{
    for (int i = 0, j = n - 1;  i < j; i++, j--)
    {
        int min = arr[i], max = arr[i];
        int min_i = i, max_i = i;
        for (int k = i; k <= j; k++)
        {
            if (arr[k] > max)
            {
                max = arr[k];
                max_i = k;
            }

            else if (arr[k] < min)
            {
                min = arr[k];
                min_i = k;
            }
        }


        swap(arr, i, min_i);

        if (arr[min_i] == max)
            swap(arr, j, min_i);
        else
            swap(arr, j, max_i);
    }
}

int swap (int arr[], int *i, int *j)
{
    int temp = arr[*i];
    arr[*i] = arr[*j];
    arr[*j] = temp;
    return arr;
}

static void Main()
{
    int arr[] = { 20, 15, 8, 10, 5, 7, 6, 2, 9, 1 };
    int n = arr;
    BiDirectionalSelectionSort(arr, n);
    printf("Array:\n");
    for (int i = 0; i < n; i++)
        printf(arr[i] + " ");
    printf("/n");
}

标签: cfunctionmultiple-definition-errorfunction-definition

解决方案


您需要前向声明函数的原型,以便在调用函数时,编译器知道函数返回类型和预期参数。

添加

int swap (int [], int *, int *);

include声明之后。


推荐阅读