我做了一个看起来像这样的函数:
//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
关键字时,所有内容都可以正常编译。
为什么会这样?
答案 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
{ ... }