inline函数必须定义在头文件吗
来源:互联网 发布:iptv管理系统php 编辑:程序博客网 时间:2024/06/10 07:51
前不久在写代码的时候遇到一个link错误,代码的原型如下所示,基本就是定义了一个基类和派生类,在派生类的一个成员函数中用到了基类定义的一个内联函数。
- // base.h
- class Base
- {
- protected:
- void fun();
- };
- // base.cpp
- #include “base.h”
- inline void Base::fun()
- {}
- // derived.h
- #include “base.h”
- class Derived: public Base
- {
- public:
- void g();
- };
- // derived.cpp
- void Derived::g()
- {
- fun(); //VC2008: error LNK2019: unresolved external symbol
- }
- // base.h
- class Base
- {
- protected:
- void fun();
- };
- // base.cpp
- #include “base.h”
- inline void Base::fun()
- {}
- // derived.h
- #include “base.h”
- class Derived: public Base
- {
- public:
- void g();
- };
- // derived.cpp
- void Derived::g()
- {
- fun(); //VC2008: error LNK2019: unresolved external symbol
- }
// base.hclass Base{protected: void fun();};// base.cpp
写这个内联函数的时候也没细想,结果违反了inline函数的要求。所谓内联函数,就是编译器将函数定义({…}之间的内容)在函数调用处展开,藉此来免去函数调用的开销。如果这个函数定义在头文件中,所有include该头文件的编译单元都可以正确找到函数定义。然而,如果内联函数fun()定义在某个编译单元A中,那么其他编译单元中调用fun()的地方将无法解析该符号,因为在编译单元A生成目标文件A.obj后,内联函数fun()已经被替换掉,A.obj中不再有fun这个符号,链接器自然无法解析。
所以,如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。在C++中,这意味着如果inline函数具有public或者protected访问属性,你就应该这么做。
阅读全文
0 0
- inline函数必须在头文件中定义吗?
- inline函数必须在头文件中定义吗?
- inline函数必须在头文件中定义吗?
- inline函数必须在头文件中定义吗?
- inline函数必须在头文件中定义吗?
- inline函数必须定义在头文件吗
- 将 inline 函数定义在头文件中
- inline函数定义放在头文件中的作用
- 为什么inline函数应该在头文件中定义?
- inline函数的定义放在头文件中
- C++中inline函数的定义可放在头文件中,inline 函数重复出现不会导致连接错误,
- C++模板类的成员函数定义与声明必须在一个头文件中
- C++:为什么inline函数的定义要放在头文件里 + inline和宏定义的区别(暂未体会到)
- C++中inline函数的定义为什么要放在头文件中?头文件中“只定义一份”是什么意思?const object 和inline函数是“一次定义规则”
- 头文件中的inline 函数
- 普通函数定义在头文件
- 头文件 ------------------- 函数定义
- 头文件里面实现一个函数,在两个cpp中包含,则重复定义,如果加上inline则不会报错
- POJ1233 Prim Kruskal
- 高性能服务器架构小结
- CodeForces Round#433
- 一道面试题
- [JZOJ5363]生命之树
- inline函数必须定义在头文件吗
- Codeblocks environment error编译器找不到问题解决方法
- POJ 3070 斐波那契数列(矩阵快速幂(版题))
- 【算法】图的最短路径(Floyd算法)
- org.hibernate.HibernateException: JDBC Driver class not found: com.mysql.jdb
- 心路里程碑
- 微信小程序UI------实现携程首页顶部的界面(弹性布局)
- Qt之模型/视图
- OkHttp