Я впервые за 20 лет сталкиваюсь с этим типом ошибки компоновки при попытке использовать чужой код.
Здесь я буду кратким и использую сокращенные примеры.
Скажите файл enums.hpp
==== content====
#ifndef _BLABLA_
#define _BLABLA_
enum SomeKind { BLACK, RED, GREEN }
static void parse(const std::string& s, SomeKind) {
// definition
}
..... More enum, and static functions
#endif
В этом файле есть несколько enum и parse. Из-за ключевого слова STATI C компилятор будет жаловаться на неиспользуемые функции. Я экспериментировал, перенося определение этих функций в файл enum. cpp. Затем, во время ссылки, я получаю сообщение об ошибке:
undefined reference to `someNameSpace::SomeKind
Одно из решений: я постараюсь использовать библиотеку как есть (вероятно, я это сделаю). Этот проект (я использую) является проектом CMake. Как лучше организовать исходный код для git избавления от обеих проблем: неиспользуемой функции и неопределенной ссылки?
После удаления метки stati c, тогда он избавится от проблемы связывания перечисления , По сути, новая организация выглядит следующим образом:
enums.hpp
enum SomeKind { }
void someFunction(SomeKind sk);
enums.cpp
void someFunction(SomeKind sk) {
// definition here
}
Я думаю, что устранение статуса c делает функцию видимой, а некоторые как включены в этап связывания. Это большая библиотека, я только несколько часов изучаю эту библиотеку.