内联函数时链接器错误

时间:2014-01-14 14:07:11

标签: c++ inline linker-errors

我做了一个看起来像这样的函数:

//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)" (?Player@@YAAAVCPlayer@@H@Z)

但是,当我删除inline关键字时,所有内容都可以正常编译。

为什么会这样?

2 个答案:

答案 0 :(得分:2)

函数get内联并作为独立函数从二进制文件中有效删除。

将实现移至标头以解决此问题。

答案 1 :(得分: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
{ ... }