一般都会出现如下的报错信息:
undefined reference to `Function( )'
collect2.exe: error: ld returned 1 exit status
这个问题在编写C\Cpp程序中也是一种比较头疼的问题,往往是与函数声明\定义的不规范造成的后果。
写OJ作业遇到了这个问题时,笔者首先是通过csdn与其他的搜索引擎进行搜索,也得到了一定的解答,但是大多是从编译器角度更加具体的描写,没有找到与当时相符的答案,只是给出了很明确的方向:函数声明定义时出了问题,这时便只需关注所指出的函数的声明与定义相关即可。
那么相应地遇到这个问题的第一步就是要先关注是否有一些粗心的问题例如如下几种:大家可以自行检查:
1. 是否在声明与定义时的函数名出现了不一致。
2. 是否在函数声明与定义时使用了不同的参数列表。
在这里的参数列表不同指的是定义的具体函数包含的参数的个数与各个类型的不同,由此便自然产生了一个相应的问题,形式参数的名字是否会有影响?
笔者通过具体实践发现f(int a);与具体定义时f(int b){}并不会产生相应的报错,这也在一定程度上有利于我们更好地认识函数定义时参数列表种形参的含义(only a symbol !!!!!)。
本质均是在主函数后定义函数时,与主函数前的声明出现了不同的情况,也就是之后定义的具体函数不是在主函数前声明的那个,也就出现了编译器层面的错误,不过要真正理解这个问题产生的原因,也就相应地要学习编译器的具体实现方面的知识。
--Nanjing University Mosms