У меня есть статическая библиотека, которая (помимо прочего) реализует крошечную функцию, которая возвращает только некоторую строку из таблицы константных строк. Эта функция не вызывается нигде внутри библиотеки, но она объявлена как inline
. Для ясности, это выглядит следующим образом:Проблема с привязкой к статической библиотеке, которая имеет встроенные функции
namespace flow
{
inline const char* GetName(BYTE methodType);
}
и реализация:
const char* flow::GetName(BYTE methodType)
{
if (methodType < 5)
return cszNameTable[ methodType ];
return NULL;
}
В другом проекте, я имею связь с этой библиотекой. У меня есть правильные .h файлы включены, и у меня есть using namespace flow;
в моем коде. Проблема, я получаю ошибки компоновщика:
error LNK2001: unresolved external symbol "char const * __cdecl flow::GetName(unsigned char)" ([email protected]@@[email protected])
Теперь я могу легко исправить, удалив «инлайн» ключевое слово из объявления функции в статической библиотеке. Итак, вот мои вопросы:
1) Зачем возникает эта ошибка? Как я могу исправить это, не изменяя исходный код статической библиотеки (не удаляя ключевое слово inline)?
2) Какова выгода от использования inline
ключевого слова в статической функции библиотеки, которая не вызываются внутри самая библиотеки? Имеет ли значение ключевое слово inline
при связывании с библиотекой из другого проекта (думаю, да, но я не уверен)?
это может быть очевидно, но является ли реализация в заголовке? – Staffan
Что с '__cdecl' в ошибке? Вы объявляете это «extern» где-то? – Stephen
@ Стаффан: нет, это не так, я не автор кода, у меня есть доступ к нему. Библиотека компилируется, хотя, возможно, поэтому причина, по которой автор не видел эту ошибку (и то же самое со мной, о мальчик) – PeterK