有关类里面内联函数的问题,请教一下

goalkeeper1983 2009-09-15 10:53:15
//Hunter.h申明如下
#pragma once
#include "iostream"
using namespace std;

class CHunter
{
public:
CHunter(void);
~CHunter(void);
void ShowRabbit();
void SetRabbit(int x);

private:
int m_nRabbit;
};

//Hnter.cpp定义如下:
#include "Hunter.h"

CHunter::CHunter(void)
{
}

CHunter::~CHunter(void)
{
}

inline void CHunter::SetRabbit(int x)
{
m_nRabbit = x;
}

inline void CHunter::ShowRabbit()
{
cout << "The Hunter has " << m_nRabbit << " rabbits." << endl;
}

//main函数
#include "Hunter.h"
void main()
{
CHunter Hunter;

Hunter.SetRabbit(10);

Hunter.ShowRabbit();
}

/*为什么我将void ShowRabbit()和void SetRabbit(int x)两个函数定义为inline函数后,执行时编译器报错哦:
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall CHunter::ShowRabbit(void)" (?ShowRabbit@CHunter@@QAEXXZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall CHunter::SetRabbit(int)" (?SetRabbit@CHunter@@QAEXH@Z),该符号在函数 _main 中被引用
我main函数里面已经包含了Hunter.h头文件了

如果去掉关键字inline时,程序可以正常执行*/
...全文
52 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goalkeeper1983 2009-09-15
  • 打赏
  • 举报
回复
各位大哥,我的积分不够这么多人分的,等我赚足了分子回头跟你们补上啊!
goalkeeper1983 2009-09-15
  • 打赏
  • 举报
回复
哦,我明白了,谢谢大家了啊,非常感谢!
goalkeeper1983 2009-09-15
  • 打赏
  • 举报
回复
你的意思是说内联函数要放在Hunter.h里面,跟函数申明放在一起吗?

inline不是必须与函数定义体放在一起才能使函数成为内联函数吗?
dclchj 2009-09-15
  • 打赏
  • 举报
回复
忘记说原因了:
inline函数在编译的时候需要将函数实现插入到代码中,而非后期连接,所以必须知道函数实现.
cphj 2009-09-15
  • 打赏
  • 举报
回复
内联的意思就是不编译成函数,而是直接把函数体内的代码展开到上级函数调用处
如果放在其他cpp中,则无法进行展开
dclchj 2009-09-15
  • 打赏
  • 举报
回复
定义为inline后,声明和实现都要在一个文件里,你把实现移到头文件中试试(头文件中加上
#include <iostream>
using namespace std;


下面的放在头文件类声明之下
inline void CHunter::SetRabbit(int x)
{
m_nRabbit = x;
}

inline void CHunter::ShowRabbit()
{
cout < < "The Hunter has " < < m_nRabbit < < " rabbits." < < endl;
}
arong1234 2009-09-15
  • 打赏
  • 举报
回复
不仅如此,哪有在类声明时不加inline,在实现时加的?这样别的类都不知道你需要inline,而只有你自己知道,这合理么?
cphj 2009-09-15
  • 打赏
  • 举报
回复
内联函数要放在头文件中

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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