2014-01-14 2 views
1

Я сделал функцию, которая выглядит следующим образом:Linker ошибка при встраивании функции

//hpp 
extern std::array<CPlayer, MAX_PLAYERS> PlayerArray; 
inline CPlayer& Player(int playerid); 
//cpp 
std::array<CPlayer, MAX_PLAYERS> PlayerArray; 
inline CPlayer& Player(int playerid) 
{ 
    return PlayerArray[playerid]; 
} 

, но при этом я получаю ошибку компоновщика говоря:

error LNK2001: unresolved external symbol "class CPlayer & __cdecl Player(int)" ([email protected]@[email protected]@[email protected]) 

Однако, когда я удалить inline ключевое слово , все прекрасно компилируется.

Почему это происходит?

ответ

3

Функция get inline и эффективно удаляется из двоичной системы как автономная функция.

Переместите реализацию в заголовок, чтобы решить эту проблему.

0

От C++ FAQ Лучшая практика, если определение тела функции находится за пределами class, а затем удалить inline ключевое слово из объявления.

class Foo { 
public: 
    void method(); ← best practice: don't put the inline keyword here 
    ... 
}; 

inline void Foo::method() ← best practice: put the inline keyword here 
{ ... } 
Смежные вопросы