Не помещайте все содержимое disc_rhs.cpp
в заголовочный файл, а затем включите его в другой файл. Это будет работать только до тех пор, пока этот файл включен в один исходный файл, как только вы включите его в другой исходный файл, вы получите несколько ошибок определения.
Правильный способ решить эту проблему - создать файл disc_rhs.h
, содержащий прототипы всех функций из disc_rhs.cpp
, которые должны использоваться другими модулями. Затем вы включите заголовочный файл в kalmanfilter.cpp
(и любые другие файлы, которые должны использовать эти функции).
EDIT:
Ошибка возникает из-за того, что файл disc_rhs
имеет расширение .c , что заставляет MSVC скомпилировать его как файл C. Однако, поскольку он используется в kalmanfilter.cpp
, компоновщик ожидает найти функцию C ++ с искаженным именем, которой не существует. Чтобы решить эту проблему, вы должны сообщить компилятору, что disc_rhs__()
является функцией C.
In disc_rhs.h
#ifdef __cplusplus
extern "C"
#endif
int disc_rhs__(double *,double *,double *,double *,double *);
Директива extern "C"
должна появляться перед каждым экспортируемым элементом с помощью disc_rhs.c
, поэтому, если у вас есть несколько вещей, которые нужно экспортировать, следующий синтаксис более удобен.
#ifdef __cplusplus
extern "C" {
#endif
int disc_rhs__(double *,double *,double *,double *,double *);
// other stuff being externed
#ifdef __cplusplus
}
#endif