|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 无法理解 请大家帮忙解决
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1588
人关注过本帖
标题:
无法理解 请大家帮忙解决
只看楼主
加入收藏
shediao
来 自:山东
等 级:
新手上路
威 望:
1
帖 子:52
专家分:0
注 册:2008-9-23
结帖率:
100%
楼主
收藏
问题点数:0 回复次数:13
无法理解 请大家帮忙解决
class A{
public: void f(){};
};
class B{
public: void f(int x){};
};
class C:public A,public B{
};
int main(){
C c;
c.f();//为什么这个是错的
c.f(2);//为什么这个也是错的
return 0;
}
请问为什么 c.f() 和 c.f(2) 都是错的
搜索更多相关主题的帖子:
问题
2008-12-14 13:20
举报帖子
使用道具
赠送鲜花
nzl
来 自:湖北荆门
等 级:
新手上路
帖 子:11
专家分:0
注 册:2008-10-10
第
2
楼
收藏
得分:0
要指定调用的是哪个类中的函数如:在主函数中
c.A::f();
c.B::f(2);
就OK了
2008-12-14 17:52
举报帖子
使用道具
赠送鲜花
xlh5225
等 级:
论坛游民
威 望:
2
帖 子:188
专家分:25
注 册:2007-8-14
第
3
楼
收藏
得分:0
有人讲一下为什么吗?而不是怎样处理!
class A{
public:
void f(){}
void f(int){}
};
A a;
a.f(); //OK
a.f(2);//OK
这样跟上面有什么区别呢?
2008-12-14 22:27
举报帖子
使用道具
赠送鲜花
newyj
等 级:
新手上路
威 望:
3
帖 子:542
专家分:0
注 册:2008-1-4
第
4
楼
收藏
得分:0
一楼 是函数隐藏
楼上的 是函数重载
2008-12-14 23:15
举报帖子
使用道具
赠送鲜花
无缘今生
等 级:
新手上路
威 望:
3
帖 子:523
专家分:7
注 册:2007-6-25
第
5
楼
收藏
得分:0
我用的是VC++6。0。编译结果如下(我把c.f(2);注释掉了):
error C2385: 'C::f' is ambiguous
warning C4385: could be the 'f' in base 'A' of class 'C'
warning C4385: or the 'f' in base 'B' of class 'C'
由错误信息得出:编译器不能确认调用的是哪个类的f方法。
以下内容纯属个人理解,如果有误,请指正:
类C中同时包含了类A和类B的成员函数f()和f(int),由于VC在编译时,会对函数名重新命名为其内部表示的形式(此结论由使用工具dumpbin查看可执行文件得来)。
时不再来!!!
2008-12-14 23:26
举报帖子
使用道具
赠送鲜花
hitcolder
等 级:
新手上路
威 望:
1
帖 子:124
专家分:0
注 册:2008-10-28
第
6
楼
收藏
得分:0
楼主的b继承了a中的f()函数,c中还继承了a和b中函数,因此在c中就既存在a的f()函数,也存在b的f()函数,因此你需要在调用c的f()函数需要使用::来确定调用的到底是哪个f()函数,要解决的办法很多,感觉可以考虑用虚函数来解决,把a中的f()设置成虚函数,继承类中重新定义。(个人理解,仅供参考)
不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-12-15 12:49
举报帖子
使用道具
赠送鲜花
hitcolder
等 级:
新手上路
威 望:
1
帖 子:124
专家分:0
注 册:2008-10-28
第
7
楼
收藏
得分:0
楼主的b继承了a中的f()函数,c中还继承了a和b中函数,因此在c中就既存在a的f()函数,也存在b的f()函数,因此你需要在调用c的f()函数需要使用::来确定调用的到底是哪个f()函数,要解决的办法很多,感觉可以考虑用虚函数来解决,把a中的f()设置成虚函数,继承类中重新定义。(个人理解,仅供参考)
不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-12-15 12:50
举报帖子
使用道具
赠送鲜花
xlh5225
等 级:
论坛游民
威 望:
2
帖 子:188
专家分:25
注 册:2007-8-14
第
8
楼
收藏
得分:0
但是参数不同啊,如果是全局函数都能由编译器区分
好像楼上几们的理由并不充分哦!
2008-12-15 13:07
举报帖子
使用道具
赠送鲜花
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
9
楼
收藏
得分:0
这个是设计编译器人的问题...函数名是地址,可能在多重继承的时候没考虑要检查函数参数,就会出现ambiguous
学习需要安静。。海盗要重新来过。。
2008-12-15 14:23
举报帖子
使用道具
赠送鲜花
无缘今生
等 级:
新手上路
威 望:
3
帖 子:523
专家分:7
注 册:2007-6-25
第
10
楼
收藏
得分:0
在C++中,局部的变量能够掩盖相同名称的全局变量,而这种掩盖对于函数一样起作用。注意这里是名字的掩盖,而不管函数的参数、返回值等其它因素。所以只要名字相同,就会被掩盖。
时不再来!!!
2008-12-15 16:52
举报帖子
使用道具
赠送鲜花
14
1/2页
1
2
快速回复:
无法理解 请大家帮忙解决
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.029250 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved