内联函数时出现链接器错误

Linker error when inlining function

本文关键字:链接 错误 函数      更新时间:2023-10-16

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

//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关键字时,一切都可以正常编译。

为什么会这样?

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

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

从C++常见问题解答最佳实践中,如果函数体定义在 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
{ ... }