跳到主要内容

多文件下内联函数的使用

事发

game::Position game::Player::getPosition() 
C++

为什么我把上面那个改为

inline game::Position game::Player::getPosition() const 
C++

也会提示:

严重性    代码    说明    项目    文件    行    禁止显示状态    详细信息
错误 LNK2019 无法解析的外部符号 "public: struct game::Position __cdecl game::Player::getPosition(void)const " (?getPosition@Player@game@@QEBA?AUPosition@2@XZ),函数 "void __cdecl game::gameMainFun(void)" (?gameMainFun@game@@YAXXZ) 中引用了该符号 HX库 D:\command\cc++\C++\HX库\HX库\gameShow.obj 1

但是去掉就没有问题的可以运行?

解决方案

内联函数通常会在每个调用点进行内联展开,而不是生成单独的函数代码。因此,如果内联函数的定义在一个源文件中,但在另一个源文件中引用了该函数且未能内联展开,就会导致链接错误。

一种解决方法是将内联函数的定义放在头文件中,以便在引用该函数的源文件中进行内联展开。这样可以避免链接错误并确保内联函数在需要的地方正确展开。

所以 需要写在.h, 而不是.cpp:

// .h
// 获取坐标
inline Position getPosition() const {
return this->position;
};

// 获取唯一id
inline unsigned short getId() const {
return this->properties.id;
};
C++

其他解决方案可以模仿迁移多文件下模版使用的, 我认为是大同小异的...

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...