2 u014615719 u014615719 于 2014.05.26 15:48 提问

vs2010提示不存在用户定义的从Date到const Date的转换
c++

Date ReadDate(const string& prompt)
{
Date dt;
cout< cin>>dt;
return dt;
}

void SetDob(const Date& dtb)
{
dob=dtb;
}
重载操作符
ostream& operator<<(ostream& os,Date& eml)
{
int mo=0,da=0,yr=0;
eml.GetDate(mo,da,yr);
os< return os;
}
istream& operator>>(istream& is,Date& eml)
{
int mo,da,yr;
is>>mo>>da>>yr;
if(is)
eml.SetDate(mo,da,yr);
else
eml.SetDate(0,0,0);
return is;
}(其中setDate和GetDate中另外定义的函数,这个应该没有问题)
这两个函数是在之前定义了的,第一个是定义在主函数前面声明的,第二个是在类person的头文件中定义的成员函数,
当我在主函数中调用pPerson->SetDob(ReadDate("Date of birth"));时,提示我vs2010提示不存在用户定义的从Date到const Date的转换,这是为什么呀,还有就是我在Date类中重载了输入输出操作符,为什么主函数中当cin>>一个Date对象时,提示没有与这些操作数匹配的>>操作符(文件不在一个cpp中,主程序包含了各个头文件的声明),求大神指点一下这是为什么呀

2个回答

muliansb
muliansb   2014.05.26 17:13

Date ReadDate(const string& prompt)
的返回值是Date 类型
void SetDob(const Date& dtb)
的参数是const Date类型,所以会报错
至于运算符重载,没有看到代码,所以。。。。。。。。。。。。。。。

u014615719
u014615719 还有第一个问题,按理说C++中是允许将非const变量传递给Const形参的吧,
3 年多之前 回复
u014615719
u014615719 我把重载操作符的代码贴上去了,我感觉代码应该是没有问题的,布局是这样子的,头文件中声明了类,然后我建了一个cpp定义了类中声明的部分成员函数和输入输出操作符(不是成员函数),主函数是另外一个cpp。是不是在调用的时候出现了什么问题或者说是主函数没有读取我定义的操作符,
3 年多之前 回复
lym753024200
lym753024200   2014.05.26 17:19

1.pPerson->SetDob(ReadDate("Date of birth"));分成两段写,估计是函数返回的一个临时对象的副本只能按值传递。
2.operator>>可能只是针对一种数据类型定义了,你输入的数据类型和定义的不匹配

lym753024200
lym753024200 要看源文件的,感觉问题出在Date类,这个类要有默认构造函数和复制构造函数,都要写正确。再就是你的SetDob中的dob是什么?如果是个Date类对象,还要复制操作符。不过我建议你在ReadDate中用newf分配一个对象先试试
3 年多之前 回复
u014615719
u014615719 那是格式问题,代码上是cout<<prompt<<"(mm dd yyyy): "和cin>>dt,不知道怎么回事显示成那样子
3 年多之前 回复
lym753024200
lym753024200 ReadDate里面你cout<<cin>>dt;什么意思?而且没有利用形参
3 年多之前 回复
u014615719
u014615719 分成两段之后还是一样的问题,好奇怪,我同样是其他几个类似的操作(只是操作数不是Date类对象,而是其他对象),都不会提示这个错误
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!