| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 677 人关注过本帖
标题:关于inline的问题
只看楼主 加入收藏
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:13 
关于inline的问题
在类中声明了成员函数,想在同样的头文件中定义成员函数,这些成员函数都要在前面加上inline吗
搜索更多相关主题的帖子: 函数 
2011-04-30 11:17
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:0 
不用吧,类里面已经声明的的函数定义不用加inline
但是定义的时候格式是
函数返回值的类型(如 int) 类名 ::成员函数名(形式参数表)

  函数体

参考如下: void  Point::SetPoint(int a,int b)
           {   ………………}

Einmal ist keinmal
2011-04-30 11:29
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
都可以不加。
实事上没有任何场合 inline 是必须的,而且只有很少的场合 inline 有意义。
2011-04-30 13:30
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 3楼 pangding
我也觉得应该是不用的,但是我在定义了一个Query类的时候,在类定义体完后,由在同一个头文件中定义了赋值操作符
如果我不加inline,就提示multiple definition of `Query::operator=(Query const&)' ,说我重定义,但加上inline后一切正常,然后我去查了下书,发现书上答案那些成员函数定义在头文件中的都有加上inline,自己写了个测试的程序,发现不用啊,才有此疑问,如何解释我上面的问题呢,请教
2011-04-30 17:53
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
一个函数就是不能定义两遍呀。如果你已经定义了一遍的话,再定义就会出这种错误。如果加 inline 就是另一个函数了,那没事。一般都加,是因为 inline 函数在编译的时候可以嵌入代码,可以提高执行效率。

你可以写一个简化后的模型,重现一下你的那个語法错误。我们来分析一下。
2011-04-30 18:03
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
这个应该加上inline的,你的程序可能有多个文件包含Query类,当然会造成重定义,我想你的那个测试程序应该是没有多个文件包含那个头文件吧,你可以再加一个.cpp文件包含.h文件看看。

离恨恰如春草,更行更远还生。
2011-04-30 18:22
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 6楼 玩出来的代码
非常感谢 玩出来的代码,每次都是你出来帮我解决问题。我不明白的是,虽然多个文件包含Query类,但是我已经在头文件里加了#ifndef。。#endif了,函数定义位于这之间,为什么还是会重定义呢,第二次包含时不是已经定义了那个宏了,不就跳过了,为什么加上inline就不会呢
2011-04-30 19:20
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 5楼 pangding
加inline就是另一函数请问这是什么意思啊
2011-04-30 19:22
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:10 
假设你的程序中有main.cpp,first.cpp,Query.h,first.h等文件。
在main.cpp中有
#include"Query.h"
#include"first.h"

在first.cpp中有
#include"first.h"

在first.h中有
#include"Query.h"

那么在main与first文件中就会有相同的函数定义,这个错误应该是链接错误的。经过编译形成的main.obj,与first.obj中都会有、同一个函数的定义与代码、当 链接时就会出现重定义。

这个例子 #ifndef 的作用在main.cpp中,因为已经有Query.h了,所以在first.h中包含的Query.h是不会包含于main.cpp中的、

离恨恰如春草,更行更远还生。
2011-04-30 19:48
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 8楼 specilize
我觉得是,当时没细想。其实应该 玩出来 说的那样。

你问的问题都比较细,其实就属于应该自己想想的。问的价值不是很大。而且想学好 c++ 我多少觉得搞这些不太有用。
2011-04-30 23:09
快速回复:关于inline的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016969 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved