#include <iostream.h>inline void p();
void main()
{
p();
}void p()
{
cout << "xxxxxxxxxx" << endl;
}
void main()
{
p();
}void p()
{
cout << "xxxxxxxxxx" << endl;
}
解决方案 »
- mfc怎么做一个下拉菜单显示成员。所有得分全给求助
- 请教这段使用临界区的代码为什么会Crash呢?
- 在vc6.0环境下写WinMain函数问题
- xml数据岛
- 如何合理的设计CMyAPP/CMyDocument/CMainFrame/CMyView各个类内拥有的函数以及功能呢?
- 请问静态链接MFC库是链接哪些库?
- 如何才能买到ATL开发指南第二版中文版?
- 非View/Document结构的MDI问题
- CTreeCtrl消息的问题
- 有谁知道日本的软件业水平如何,有一家NEC SOFT 的软件公司来我们学校招应届本科生,年薪340万日元
- 我要在数据库中建自动建一些表,如果它存在就不用重建,如果不存在,就建表.
- 问一个有关SDK中ListView的问题?
我先说答案吧,不管是全局函数还是类的成员函数(即方法),都只能在函数声明时用inline。原因看下面的例子:
现有一程序,包括如下三个文件:
//MyC.cpp文件内容
#include <iostream.h>
#include "book.h"int add(int a,int b);void main()
{
cout<<add(24,76)<<endl;
book a;
a.show();
}//book.h文件内容
class book
{
public:
void show();
};//book.cpp文件内容
#include <stdio.h>
#include "book.h"int add(int a,int b)
{
return (a+b);
}void book::show()
{
printf("show me this message!");
}你试着把inline加在函数声明时都无问题,但若加在实现中时编译器都会出现类似如下错误:
Compiling...
book.cpp
Linking...
MyC.obj : error LNK2001: unresolved external symbol "public: void __thiscall book::show(void)" (?show@book@@QAEXXZ)
Debug/MyC.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...MyC.exe - 2 error(s), 0 warning(s)
inline函数不能extern的,但如果声明和实现代码在同一文件中,则inline随便写在那儿都行。不过一般被inline的函数都是用来实现比较简单的功能,故通常都是声明时加上实现代码的,如:
inline int add(int a,int b){return (a+b);}
这样,系统执行函数时效率会高一些,但把功能复杂的函数inline的话,只会适得其反,所以这里分开写也只是举个例子。
To Featured(我握着爱情的门票静静排队……) ( ):
我也是一个菜鸟,当我第一来CSDN的时候,感觉就象来到天堂,渴望把困扰已久的问题一古脑儿都倒出来,然后等待答案的心情激动又焦急,不停地刷屏看(很好笑吧,现在回头想想自己也觉得好笑),久久不见有人回贴答复心情就变成抓狂了,同时还有深深的失望......初学者的心情应该在致如此吧,如果通过我的努力可以让一个人少一份失望,少一份焦虑的话,我也会很欣慰的,所以这里的问题贴,不管有分没分,只要我有能力都会尽力回答的,并保证回复内容的准确性(一般都会自己上机试试),只因为我也曾经这样走过......
如果分开,就在实现时加上inline
好几天沒來這里了,再次感謝,因為我也曾得到過你的幫助!
TO EVERYONE:
上位這位仁兄說得非常好,的確很多新人都有這樣的心情,因為每個人都是從那過來的。所以真心希望來這里的每一個人都能像SNOW_ICE11111一樣!
TO 樓主:
SNOW_ICE11111已經將你的問題回答得非常好了,相信你看了之后一定會對INLINE函數有了一個新的理解。