на это, должно быть, ответили миллион раз, но я не могу найти подходящее решение.g ++ undefined ссылка на функцию постоянного стояния
Я определил свободную функцию в sensor.cpp
:
std::string printTargetGasName(enalu::CombThreshold::TargetGas){}
Тогда я объявил прототип функции
в sensor.hpp
std::string printTargetGasName(enalu::CombThreshold::TargetGas);
Затем я включил sensor.hpp
в core_enose.hpp
и попробовать использовать функцию в core_enose.cpp
(enalu
- это всего лишь на mespace).
я получаю undefined reference
связывая ошибку
core_enose.cpp:284: undefined reference to `enalu::printTargetGasName(enalu::CombThreshold::TargetGas)'
инструкции соединительной в файле макияж кажется правильным, то есть sensor.opp приходит после core_enose.opp:
g++ -g -Wall -Wextra -pedantic -std=c++11 [...] obj_dbg/core_enose.opp [...] obj_dbg/sensor.opp [...]
Я также проверил, чтобы увидеть если символ правильно существует в файле sensor.opp:
$> nm obj_dbg/sensor.opp | grep printTarget
$> 000000000000cc9c T _Z18printTargetGasNameN5enalu13CombThreshold9TargetGasE
Я также пробовал отчаянные ночные меры, например extern
, или повторно включив sensor.hpp непосредственно в файле core_enose.cpp. Ничто не помогает, и в этот момент я разочарован простым ответом, который ускользает от меня.
Обратите внимание, что я не предоставляю код, потому что файлы sensor.pp довольно большие, содержащие несколько классов, которые я также использовал в своей программе. То, что я описываю выше, - это точные шаги, которые я выполнил, чтобы добавить эту бесплатную функцию к другому рабочему приложению.
Не могли бы вы мне помочь?
Это именно то, как вы заявили о своей функции в sensor.hpp? Я удивлен, что он даже компилирует –
@YanZhou no, я просто опустил внутренности реализации между '{...}'. (также забыл добавить возврат функции, исправлен) – nass
Вопрос Яна Чжоу о декларации в файле .hpp, а не о реализации. –