我遇到一个函数问题,该函数接受对两个用户定义对象的输入引用。这是它的样子:
void copy_job_list( vector<Job> &org, vector<Job> &dest)
{
// ....
}
该函数在文件functions.cpp
中定义,并在job_random.cpp
中调用,两个文件都包含用于声明此函数声明的标题。
现在在job_random.cpp
时,我用
copy_job_list( Old_best_list.J, Old_best_list_new_times.J) ;
其中Old.best_list.J
和Old_best_list_new_times.J
是Job
类型的向量,我在g ++中遇到以下错误:
job_random.o:job_random.cpp:(.text+0x1fc): undefined reference to
`copy_job_list(std::vector<Job, std::allocator<Job> >,
std::vector<Job, std::allocator<Job> >&)'
collect2: ld returned 1 exit status
mingw32-make: *** [random_job] Error 1
这看起来像链接器确信只有第二个参数应该是一个引用,并且首先应该是一个值。事实上,如果我更改copy_job_list()的定义和声明,以便第一个参数按值传递,那么程序将编译。但链接器为什么要坚持我呢?
从我在网上找到的内容看来,未定义的引用消息通常意味着我没有以正确的方式包含标题,但functions.cpp
包含许多其他函数{{1}使用没有故障,所有这些都是通过公共标题声明的。
答案 0 :(得分:3)
您可能在头文件中有void copy_job_list( vector<Job> org, vector<Job> &dest)
,或者以其他方式向前声明。还要确保你的依赖项是正确的 - 做一个干净的构建。
答案 1 :(得分:0)
首先,错误消息看起来像来自链接器,而不是 编译器。这只是猜测,因为你没有向我们展示代码,但我会 猜测标题中的声明缺少&amp ;. (我也是 对于什么载体可能是好奇的。错误消息表明 std :: vector,但这是一个模板,而你向我们展示的代码却没有 显示模板的任何使用。)