免费注册 查看新帖 |

Chinaunix

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

[C++] 最近学习C++,有两个问题请教各位 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-22 13:18 |只看该作者 |倒序浏览
这两个问题困扰好几天了,请大家帮忙。
1.下面的代码在Visual studio6.0,VS2005中编译毫无问题,但到了gcc(3.4.3和4.*)编译通不过,是不是编译器的问题?
#include<iostream>
using namespace std;
class clock
{
public:
        clock(int H,int M,int S);
private:
        int Hour,Minute,Second;
};
clock::clock(int H,int M,int S)
{
        Hour=H;
        Minute=M;
        Second=S;
}
int main( )
{
        clock myclock(10,20,30);
        return 0;
}

2.C++中相同的域内不允许声明同名的函数和变量,但在使用的时候,函数调用和变量的使用完全不同(函数有参数),编译器应该可以区分出来,不知道为什么还有这样的规则?看了看名字解析的相关内容,没找到答案。

论坛徽章:
0
2 [报告]
发表于 2006-08-22 13:35 |只看该作者
1。 朋友,标准C里面有个clock函数,所以于你的冲突了。你只要将你的类该个名字就好了,比如clocks

[ 本帖最后由 harly 于 2006-8-22 15:17 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-08-22 14:17 |只看该作者
原帖由 Tony_phoenix 于 2006-8-22 13:18 发表
2.C++中相同的域内不允许声明同名的函数和变量,但在使用的时候,函数调用和变量的使用完全不同(函数有参数),编译器应该可以区分出来,不知道为什么还有这样的规则?看了看名字解析的相关内容,没找到答案。


函数名可以当变量用

论坛徽章:
0
4 [报告]
发表于 2006-08-22 15:37 |只看该作者
用g++编译C++程序……

论坛徽章:
0
5 [报告]
发表于 2006-08-22 15:37 |只看该作者
函数名就是函数的地址

论坛徽章:
0
6 [报告]
发表于 2006-08-22 17:27 |只看该作者
那么照各位的意思,如果允许函数与变量同名的话,编译器区分不出?
编译器究竟如何进行名字解析?

论坛徽章:
0
7 [报告]
发表于 2006-08-22 19:47 |只看该作者
我想,你很可能需要看《C++的设计与演化》一书了!(开个玩笑!)

论坛徽章:
0
8 [报告]
发表于 2006-08-22 20:30 |只看该作者
原帖由 Tony_phoenix 于 2006-8-22 13:18 发表
这两个问题困扰好几天了,请大家帮忙。
1.下面的代码在Visual studio6.0,VS2005中编译毫无问题,但到了gcc(3.4.3和4.*)编译通不过,是不是编译器的问题?
#include<iostream>
using namespace std;
class clock
{ ...

2.C++中相同的域内不允许声明同名的函数和变量,但在使用的时候,函数调用和变量的使用完全不同(函数有参数),编译器应该可以区分出来,不知道为什么还有这样的规则?看了看名字解析的相关内容,没找到答案。


第一个问题:你定义的类 clock 和标准库中的 clock() 函数发生了冲突。可以通过更改此类的名字避免问题,但是更好的方法是把你的类定义放入一个自己命名的名字空间内,而不是放到默认的全局空间内。在实际编成中应该养成使用名字空间的习惯,以避免名字冲突。

第二个问题:它们的使用也有相同的时候,也就是说函数也有不带参数使用的时候,比如可以直接用函数名初始化一个函数指针。因此,你在上面的假设没有成为标准的规定。

论坛徽章:
0
9 [报告]
发表于 2006-08-23 08:07 |只看该作者
谢谢上面各位的,明白了很多,看来要学好C++还是比较难的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP