免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2494 | 回复: 12
打印 上一主题 下一主题

新手:inline? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-30 17:26 |只看该作者 |倒序浏览
CNGraph.h
  1. #ifndef __CNGRAPH_H
  2. #define __CNGRAPH_H

  3. class CGraph
  4. {
  5. private:
  6. public:
  7.   void addLink(unsigned short, unsigned short);
  8. };

  9. #endif
复制代码

CNGraph.cpp
  1. #include "CNGraph.h"

  2. ////////////// class CGraph ////////////
  3. inline void CGraph::addLink(unsigned short a, unsigned short b)
  4. {
  5. }
复制代码

test.cpp
  1. #include "CNGraph.h"

  2. int main()
  3. {
  4.   CGraph g;
  5.   g.addLink(0,1);
  6. }
复制代码

编译错误:
g++ test.cpp CNGraph.cpp
/tmp/ccoZkP9d.o(.text+0x1c): In function `main':
: undefined reference to `CGraph::addLink(unsigned short, unsigned short)'
collect2: ld returned 1 exit status

但如果
CNGraph.cpp
  1. #include "CNGraph.h"

  2. ////////////// class CGraph ////////////
  3. void CGraph::addLink(unsigned short a, unsigned short b)
  4. {
  5. }
复制代码

就可以。为什么呢?找了些资料,没发现。多谢

论坛徽章:
0
2 [报告]
发表于 2006-05-30 19:36 |只看该作者
要进行内联的话,就得把addLink的定义放在类头里面,或者放到头文件部分。

或者把实现文件里的函数定义的'inline'去掉,不使用内联。

论坛徽章:
0
3 [报告]
发表于 2006-05-31 01:01 |只看该作者
TC++PL 9.2
An inline function (§7.1.1, §10.2.9) must be defined – by identical definitions (§9.2.3)
– in every translation unit in which it is used.
一个inline函数必须在需要用它的每个编译单位里定义--通过完全一样的定义。

[ 本帖最后由 westgarden 于 2006-5-31 20:06 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-05-31 08:25 |只看该作者
inline函数只可能具有内部连接,而没有外部连接的特性。
不会的。inline就是一个提示,提示编益器在编译期间在在线化扩展。和其他函数没什么区别

论坛徽章:
0
5 [报告]
发表于 2006-05-31 09:43 |只看该作者
兄弟,你那个是连接错误,不是编译错误。inline 修饰的函数不出现在目标文件的符号表中,导致连接器查不到这个符号。

论坛徽章:
0
6 [报告]
发表于 2006-05-31 09:59 |只看该作者
编译的时候没有加入CPP文件罢了,跟inline没有关系

论坛徽章:
0
7 [报告]
发表于 2006-05-31 10:02 |只看该作者
原帖由 converse 于 2006-5-31 09:59 发表
编译的时候没有加入CPP文件罢了,跟inline没有关系

怎么解释?

论坛徽章:
0
8 [报告]
发表于 2006-05-31 10:08 |只看该作者
我看命令行上有 CPP 文件啊。

论坛徽章:
0
9 [报告]
发表于 2006-05-31 10:23 |只看该作者
恩,写错了,是链接错误。
还是不太清楚... :(

论坛徽章:
0
10 [报告]
发表于 2006-05-31 10:45 |只看该作者
原帖由 andyY 于 2006-5-31 10:23 发表
恩,写错了,是链接错误。
还是不太清楚... :(

可以这样理解,inline告诉编译器将函数调用展开成相应函数实现代码,也就是说经处理后的代码不再有函数调用,所以在在每个调用内联函数的文件中都应当能获取到函数实现的代码,所以要将inline函数放到头文件中。(如果你理解#define的话就好理解这儿了,inline是对#define的改进,有类型检查)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP