C 错误的原因是什么;对(某些函数)的未定义引用“;?

C 错误的原因是什么;对(某些函数)的未定义引用“;?,c,linker-errors,C,Linker Errors,我得到一个错误: main.o(.text+0x1ed): In function `main': : undefined reference to `avergecolumns' collect2: ld returned 1 exit status 当我看到gcc*.o时。我不太清楚是什么导致了这个错误。其他海报解释为功能未找到或功能为空。如果有人能澄清或完善,将不胜感激 下面是我的函数代码(我试图计算二维数组中列的平均值): 另外,这是链接器错误还是编译错误(我不确定要添加哪个标记)。这

我得到一个错误:

main.o(.text+0x1ed): In function `main':
: undefined reference to `avergecolumns'
collect2: ld returned 1 exit status
当我看到gcc*.o时。我不太清楚是什么导致了这个错误。其他海报解释为功能未找到或功能为空。如果有人能澄清或完善,将不胜感激

下面是我的函数代码(我试图计算二维数组中列的平均值):


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

这是链接器错误
ld
是链接器,因此如果您收到一条以“ld returned 1 exit status”结尾的错误消息,它会告诉您这是链接器错误


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

很好!另一个例子,为什么短是好的,在一个关键的名称,如“平均”和“列”是一个负债-耶,为usr,tmp和lib:-)哦,感谢你解释了ld的意思!没有看到拼错的字,我觉得很傻。我会记住命名惯例!再次感谢!:)@Piseagan使用一种约定,可以明确变量/函数中单词之间的分隔符在何处,也可以更容易地捕捉打字错误。Camelcase和下划线都是不错的选择,即
平均列
平均列
都比
平均列
更容易识别。
#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: \n");
    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;
        }
#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);

....

}