У меня проблема с функцией, которая принимает в качестве входных ссылок два пользовательских объекта. Вот как это выглядит:
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
содержит множество других функций, которые job_random.cpp
использует без заминка, все они объявлены через общий заголовок.