erakli
@erakli
Увлечённый IT

Как исправить ошибку LNK2019 при использовании статического метода?

Имеется набор всевозможных статических функций (ссылка).

В нём мне необходима функция
static CAAEllipticalObjectDetails Calculate(double JD, const CAAEllipticalObjectElements& elements, bool bHighPrecision);

Я пишу обёртку для данного набора функций, чтобы использовать их в библиотеке, чтобы потом использовать их в Delphi.

Решил делать "дёшево и сердито" (с помощью так называемого flattering-метода - ссылка).

Проблема возникает в строчке с вызовом вышеупомянутой функции
CAAEllipticalObjectDetails ResTemp;
ResTemp = CAAElliptical::Calculate(JD, CAAObjectElem, bHighPrecision);

Текст ошибки:
AA.obj : error LNK2019: unresolved external symbol "public: static class CAAEllipticalObjectDetails __cdecl CAAElliptical::Calculate(double,class CAAEllipticalObjectElements const &,bool)" (?Calculate@CAAElliptical@@SA?AVCAAEllipticalObjectDetails@@NABVCAAEllipticalObjectElements@@_N@Z) referenced in function _EllipticalCalculate@72


У меня есть подозрения на:
1) __cdecl
2) то, что как то неправильно обращаюсь к методу
3) чего-то не до-объявил

Изучаю C++ недавно, создаю библиотеку по причине того, что основная программа написана на Delphi и переписывать её нет желания и времени, а используемые функции состоят из ещё большего кода и переписывать выборочно тоже нет желания. Есть желание понять работу с dll.

Спасибо за ответы.

UPD: И в правду, забыл упомянуть, что этот набор функций подключается к проекту с помощью include основного заголовочного файла (полный текст AA.cpp, вызывающего его).

Подключение
#include "aaplus\AA+.h"
При этом ни сам заголовок, ни файл с методом к проекту не подключены. Если я правильно понимаю уточнения kloppspb и Станислав Макаров, то мне надо исправить этот момент.
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
@vilgeforce
Раздолбай и программист
Нет реализации метода в проекте. Добавляйте CPP/LIB.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C++
Теоретически заголовочный файл в проект подключать не обязательно, это для вашего удобства (чтобы вы не теряли файлы, которые у вас есть в проекте). А вот cpp нужно полюбому, т.к. иначе у компилятора не попросят его собрать, а линковщику - не расскажут, что есть объектный файл (который получится после компиляции), который содержит реализации неких функций. Результат - линковщик ищет-ищет, и не находит релизацию метода.
Если бы у вас был lib а не cpp, то ситуация та же самая, только без этапа компиляции. Грубо можете считать lib-файл группой собранных воедино объектных файлов. В нем уже скомпилированный код находится, поэтому его нужно передавать сразу линковщику. Для этого в ключах линкощика указываются так называемые Library Directories - директории, где искать библиотеки, а также dependencies - какие конкретно lib-файлы надо просматривать при линковке. В студии есть как глобальный список таких директорий, так и локальные настройки для каждого проекта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы