Подсказка скрыта в выводе компоновщика:
Undefined symbols for architecture x86_64:
"Player::Player(std::__1::basic_string_view<char, std::__1::char_traits<char> >)", referenced from:
_main in dummy-main.cpp.o
"vtable for BaseEntity", referenced from:
Player::~Player() in dummy-main.cpp.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for Player", referenced from:
Player::~Player() in dummy-main.cpp.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
, который сразу предупреждает меня, что вы забыли связать модуль компиляции, содержащий определения этих функций.
Предполагая, что Player
определено в player.hpp
и player.cpp
и что они находятся в подкаталоге src
, тогда я предлагаю обновить add_executable
вызов:
add_executable(TestProject "${PROJECT_SOURCE_DIR}/main/dummy-main.cpp" src/player.hpp src/player.cpp)
Обратите внимание, что здесь подразумевается «текущий исходный или двоичный каталог», и нет необходимости его прописывать.
Также обратите внимание, что я включил заголовочный файл как часть цели.В этом есть ряд преимуществ:
- при создании файлов проекта для visual studio, xcode и т. Д., Эти файлы будут отображаться в дереве проекта.
- При использовании последней версии
INSTALL
командам, эти файлы могут иметь свойства, обеспечивающие их правильную обработку (например, общедоступные или частные заголовочные файлы для библиотечных целей)