Я следую вступительному руководству http://www.linuxinsight.com/files/alp/alp-ch01-getting-started.pdf.
Я создал исходные файлы main.c, recerocal.cpp и recerocal.hpp.Я был в состоянии успешно скомпилировать эти файлы.Проблема возникает, когда я иду, чтобы связать их, и я получаю следующее сообщение об ошибке:
main.o: In function `main':
main.c:(.text+0x30): undefined reference to `reciprocal'
collect2: ld returned 1 exit status
Я понимаю, что это почему-то неправильно использует заголовочные файлы, однако я действительно не знаю, что попробовать, поскольку яЯ очень тщательно проделал шаги.
Если у кого-то есть идея, почему она выдает эту ошибку, я был бы очень признателен.
Спасибо
** ОБНОВЛЕНИЕ Воткод для трех исходных файлов:
main.c
#include <stdio.h>
#include "reciprocal.hpp"
int main (int argc, char **argv) {
int i;
i = atoi(argv[1]);
printf("The reciprocal of %d is %g\n", i, reciprocal(i));
return 0;
}
recerocal.cpp
#include <cassert>
#include "reciprocal.hpp"
double reciprocal(int i) {
assert(i != 0);
return 1.0/i;
}
responserocal.hpp
#ifdef __cplusplus
extern "C" {
#endif
double reciprocal(int i);
#ifdef __cplusplus
}
#endif
Iфактически изменили файл responserocal.hpp с момента первоначальной публикации.Единственным изменением, которое я сделал, было удаление ключевого слова extern из сигнатуры функции.Ранее он читал
extern double reciprocal(int i);
Это изменение позволило мне связать программу, и теперь я могу ее запустить.Я думаю, что, возможно, происходило то, что второй экстерьер перекрывал первый.Если у кого-то есть понимание этого, мне было бы интересно узнать.
Спасибо за вашу помощь всем.