Неопределенная ссылка для функции, принимающей ссылки на пользовательские классы - PullRequest
0 голосов
/ 29 марта 2011

У меня проблема с функцией, которая принимает в качестве входных ссылок два пользовательских объекта. Вот как это выглядит:

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 использует без заминка, все они объявлены через общий заголовок.

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Вероятно, у вас есть void copy_job_list( vector<Job> org, vector<Job> &dest) в заголовочном файле или он объявлен вперед другим способом. Также убедитесь, что ваши зависимости правильные - выполните чистую сборку.

0 голосов
/ 29 марта 2011

Во-первых, сообщение об ошибке выглядит так, как будто оно исходит от компоновщика, а не от компилятора.Это всего лишь предположение, поскольку вы не показываете нам код, но я предполагаю, что в объявлении в заголовке отсутствует символ &.(Мне также любопытно, какой вектор может быть. В сообщении об ошибке предлагается std :: vector, но это шаблон, а код, который вы нам показываете, не показывает какого-либо использования шаблона.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...