函数接受对用户定义类的引用的未定义引用

时间:2011-03-29 08:36:37

标签: c++ reference g++ undefined

我遇到一个函数问题,该函数接受对两个用户定义对象的输入引用。这是它的样子:

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.JOld_best_list_new_times.JJob类型的向量,我在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}使用没有故障,所有这些都是通过公共标题声明的。

2 个答案:

答案 0 :(得分:3)

您可能在头文件中有void copy_job_list( vector<Job> org, vector<Job> &dest),或者以其他方式向前声明。还要确保你的依赖项是正确的 - 做一个干净的构建。

答案 1 :(得分:0)

首先,错误消息看起来像来自链接器,而不是 编译器。这只是猜测,因为你没有向我们展示代码,但我会 猜测标题中的声明缺少&amp ;. (我也是 对于什么载体可能是好奇的。错误消息表明 std :: vector,但这是一个模板,而你向我们展示的代码却没有 显示模板的任何使用。)