У меня есть статическая библиотека, которая (помимо прочего) реализует крошечную функцию, которая возвращает только некоторую строку из таблицы константных строк.Эта функция нигде не вызывается внутри библиотеки, но все равно объявлена как 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)" (?GetName@flow@@YAPBDE@Z)
Теперь я могу легко это исправить, удалив ключевое слово "inline" из объявления функции в статической библиотеке.Итак, вот мои вопросы:
1) Почему появляется эта ошибка?Как я могу исправить это без изменения исходного кода статической библиотеки (без удаления встроенного ключевого слова)?
2) В чем преимущество использования ключевого слова inline
в функции статической библиотекито есть не вызывается внутри самой библиотеки ?Имеет ли ключевое слово inline
какое-либо влияние при связывании с библиотекой из другого проекта (думаю, что да, но я не уверен)?