使用inline时链接出错

不录 2004-03-24 10:45:28
方法一:
//a.h
class a
{
public:
inline int getvalue() {return m_value;}
private:
int m_value;
}
方法二:
//a.h
class a
{
public:
int getvalue();
private:
int m_value;
}

//a.cpp
inline int a::getvalue()
{
return m_value;
}


在vc++中使用第一种方法时链接时不会出错,但用第二种方法时有的时候会出现以下链接错误,不知道是为什么
error LNK2001: unresolved external symbol "public: int __thiscall a::getvalue(void)" (?getvalue@a@@QAE_NXZ)
Release/SBD.exe : fatal error LNK1120: 1 unresolved externals
...全文
107 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunrui 2004-03-24
  • 打赏
  • 举报
回复
inline函数的实现要放在头文件里。因为如果inline的请求被编译器满足,则编译器需要inline函数的源代码以实现在调用点的展开。如果inline函数的实现在不包含在头文件里而是放在另一个实现文件中,则编译器需要想办法找到它。这样一方面增加了编译器的实现难度,另一方面也增加了编译的时间。所以目前一般的编译器都要求inline函数的实现放在头文件里。不过不排除将来编译器支持将inline函数的声明和定义分别放在头文件和CPP中。
不录 2004-03-24
  • 打赏
  • 举报
回复
晕,原来inline只能定义在cpp呀,晕
abitz 2004-03-24
  • 打赏
  • 举报
回复
如果定义在cpp文件中会导致无法链接。
abitz 2004-03-24
  • 打赏
  • 举报
回复
看错了,你那还有个cpp注释。
inline函数要定义在头文件中。
不录 2004-03-24
  • 打赏
  • 举报
回复
不行,第二个错误的解决方法我早试过,没有用,定义和实现都加上inline也一样不行。不知道为什么。
abitz 2004-03-24
  • 打赏
  • 举报
回复
第一种不需要inline关键字:在类内定义的函数自动成为inlne。
第二种错误。
inline在声明时使用,不在定义时使用。应该是这样:
class a
{
public:
inline int getvalue();
private:
int m_value;
}

//a.cpp
int a::getvalue()
{
return m_value;
}

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧