| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:请指出错误
只看楼主 加入收藏
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:4 
请指出错误
class Foo
{
public:explicit Foo(ing arg){......}
};
void g(Foo f){.....}
int main()
{
Foo f1;
g(f1);
g(-999);
return 0;
}
我觉得是g(f1);错了,是不是呢?因为这个构造函数是一个转型构造函数
搜索更多相关主题的帖子: public return 
2006-05-31 20:50
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
收藏
得分:0 
g(f1); //没错
g(-999); //这里出错.

因为构造函数加上了explicit后......禁止隐式的调用构造函数类型转换.....


E-mail/MSN: stylev@
2006-05-31 21:43
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
#include<iostream.h>
class Foo
{
public:
explicit Foo(int arg){n=arg;}
void print(){cout<<n<<endl;}
private:
int n;
};
void g(Foo f)
{
f.print();
}
int main()
{
Foo f1;
g(f1);
g(-888);
return 0;
}
我把程序补全了,程序在Foo f1;g(-888);这两行都报错了,为什么呢?
请教
2006-05-31 22:29
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

第一个报错是因为你已经显示的定义了你的类的构造函数(系统就不会为你再加默认构造函数),所以如果要用到默认构造函数就必须再显示的定义一个.
第二个就象2楼说的那样


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-31 23:00
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
收藏
得分:0 
Foo f1; //没有显示给Foo对象赋参数 解决办法 Foo f1(3);

g(-888); //见2楼 解决办法 类中去掉explicit关键字.

E-mail/MSN: stylev@
2006-05-31 23:58
快速回复:请指出错误
数据加载中...
 
   



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

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