inline函数是不是不能在本类以外的地方调用?

永夜星空 2010-04-09 08:09:52
我在类FileNode中定义了一个函数FileNode::IsDirectory()为inline函数,因为它会被频繁调用就觉得inline速度可能快些吧.但当我在其它的地方(非FileNode成员函数)调用的时候就出了如下link错误:

错误 1 error LNK2019: 无法解析的外部符号 "public: int __thiscall FileNode::IsDirectory(void)" (?IsDirectory@FileNode@@QAEHXZ),该符号在函数 "int __stdcall Count(class Tree2Node *,long)" (?Count@@YGHPAVTree2Node@@J@Z) 中被引用 TreeView.obj Tree

如果把inline关键字删除就正常了.这是怎么回事呢
...全文
241 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
星光伴月 2010-04-09
  • 打赏
  • 举报
回复
类里的inline函数必须放在头文件中的,有以下两种形式:
一、
class A{
int x,y;
public:
inline int fun(){reutrn x;}
};
二、
class A{
int x,y;
inline int fun();
};
int A::fun(){return x;}

rtygbwwwerr 2010-04-09
  • 打赏
  • 举报
回复
inline 函数的声明和定义必须放在同一个文件中
永夜星空 2010-04-09
  • 打赏
  • 举报
回复
真的啊,谢谢了
把函数放到头文件就OK了
pytf 2010-04-09
  • 打赏
  • 举报
回复
把inline函数放到头文件去试试
永夜星空 2010-04-09
  • 打赏
  • 举报
回复
//文件FileNode.cpp

inline BOOL FileNode::IsDirectory(void)
{
return fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}

//文件TreeView.cpp

DWORD totalize=0;
DWORD totalizef=0;
DWORD totalized=0;
// CTree1View 消息处理程序
BOOL CALLBACK Count(Tree2Node* p,LPARAM lp)
{
totalize++;
if(((FileNode*)p)->IsDirectory()) //这里就是发生错误的地方
totalized++;
else
totalizef++;
return true;
}

void CTree1View::OnTree1() //统计,是一个菜单处理过程
{
ft1.EnumNodeLR(ft1.root,Count,0); //枚举所有节点
}


--------------------------------------
FileNode继承于Tree2Node
typedef BOOL (CALLBACK *NODEENUMPROC)(Tree2Node*,LPARAM);

ft1.EnumNodeLR(ft1.root,Count,0)
ft1为一个存储树结构的类,它的每一个节点是一个Tree2Node类型,
这个函数的作用就是枚举所有的节点,并对于每一个节点调用一次Count函数
大体上就是这样的
tsh185 2010-04-09
  • 打赏
  • 举报
回复
你的代码不值钱 问问题 贴代码

你能告诉我 我个这输出 为什么是 5 吗 ??

怎么回答你哦
appleprince88 2010-04-09
  • 打赏
  • 举报
回复
把代码贴上看看!
永夜星空 2010-04-09
  • 打赏
  • 举报
回复
编译环境是VC2008

64,282

社区成员

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

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