C ++ неопределенная ссылка на тип enum во время компоновки - PullRequest
0 голосов
/ 02 мая 2020

Я впервые за 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 делает функцию видимой, а некоторые как включены в этап связывания. Это большая библиотека, я только несколько часов изучаю эту библиотеку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...