2

我试图理解为什么 foo 函数会触发链接器错误“未定义对 foo 的引用”,只有当我将其定义放在列表的最后时,并且如果声明位于列表中的其他任何位置,则错误不存在了。如果有帮助,我将使用 DevC++ 5.3.0.4 创建一个 C 项目,并以此文件作为主文件。所有其他功能都正常工作,我想了解为什么定义的位置如此重要,因为该功能不使用其他功能?

最初确实如此,但在试图弄清楚为什么会出现此错误时,我已经消除了我认为可能的原因,因此 foo 函数体内的所有其他函数调用。

我想这可能与数组参数有关,但是这个函数有什么特别之处而不是其他函数呢?

#include <stdio.h>
#include <stdlib.h>





void removeDuplicate(int position, int vector[], int n); 
int belongsToSet(int x, int v[], int vectorDimension);
int isDuplicate(int position, int vector[], int n);
void displaySet(int v[], int dimension);
int foo(int v[]);




int main(int argc, char *argv[]) {
    int m = -1, n = -1, i, j;
    int a[20], b[20], reunion[40], intersection[40], abDifference[20],
     baDifference[20];
    int reunionIndex = 0, intersectionIndex = 0, abDifferenceIndex = 0,
      baDifferenceIndex = 0;


    i = foo(a);
    getch();
    return 0;
}

int belongsToSet(int x, int v[], int vectorDimension){
    int i;
    for (i = 0; i < vectorDimension; i++){
        if (v[i] == x){
            return 1;
        }
    }
    return 0;
}



void removeDuplicate(int position, int vector[], int n){
    int i;
    for (i = position; i < n - 1; i++){
        vector[i] = vector[i + 1];
    }
}

int isDuplicate(int position, int vector[], int n){
    int i;
    for (i = 0; i < n; i++){
        if ((vector[i] == vector[position]) && (i != position)){
            return 1;
        }
    }
    return 0;
}


void displaySet(int v[], int dimension){
    printf("\n");
    if (dimension == 0){
        printf("\xed");
    }else{
        int i;
        printf("{");
        for (i = 0; i < dimension; i++){
            printf("%d, ", v[i]);
        }
        printf("\b\b}");
    }

int foo(int v[]){
    return 1;
}

}
4

1 回答 1

2

如代码所示,底部的 foo 位于 displaySet 的定义中。

于 2013-11-01T18:04:00.970 回答