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);
....
}