关于C#:导致错误“未定义引用(某些功能)”的原因是什么?

What causes the error “undefined reference to (some function)”?

本问题已经有最佳答案,请猛点这里访问。

我得到错误:

1
2
3
main.o(.text+0x1ed): In function `main':
: undefined reference to `avergecolumns'

collect2: ld returned 1 exit status

我不太确定是什么导致了这个错误。其他海报解释说,没有找到函数或函数为空。如果有人能澄清或完善,将不胜感激!

这是我的函数代码(我正在尝试计算二维数组中列的平均值):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include"my.h"

void averagecolumns (int x, int y, int** a)
{
    int i;
    int j;
    float sum;
    float colAvg;

    sum = 0;
    colAvg = 0;

    printf("i.  The column averages are:
"
);
    for(i = 0; i < x; i++)
        {
            for(j = 0; j < y; j++)
                {
                    sum += a[i][j];
                    colAvg = sum / (float)x;
                }
            printf("Column: %3d, Average: %6.2f", j, colAvg);
            sum = 0;  
            colAvg = 0;
        }

主要的相关部分有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include"my.h"

int main (int argc, char* argv[])
{
     int** a;
     float** colAvg;
     int ROWS;
     int COLS;
     int i;
     int j;
     int** table;
     FILE* fpmyfile;
     int closeResult;

....

             printme (ROWS, COLS, a);                              // call functions a - j
             oddvalues (ROWS, COLS, a);
             oddlocations (ROWS, COLS, a);
             countoddrows (ROWS, COLS, a);
             addrows (ROWS, COLS, a);
             findfirstsmall (ROWS, COLS, a);
             findlastlarge (ROWS,COLS, a);                          
             addcolumns (ROWS, COLS, a);
             avergecolumns (ROWS, COLS, a);

....

}

另外,这是链接器还是编译错误(我不确定要添加哪个标记)。


这是一个链接器错误。ld是链接器,因此,如果您收到一条以"ld returned 1 exit status"结尾的错误消息,说明这是一个链接器错误。

错误消息告诉您,您所链接的对象文件中没有包含avergecolumns的定义。原因是您定义的函数被称为averagecolumns(换句话说,您在调用函数时拼错了函数名(也可能是在头文件中,否则在编译时会得到不同的错误))。