函数编译时出错,说没有适合的默认构造函数可使用,自己加了个构造函数,又说函数重载有歧义,我郁闷了,C++新手,求指教!!!
#include <iostream>
#include <iomanip>
using namespace std;
class MYTIME{
public:
static bool IsValid(int, int, int);
MYTIME(int, int, int);
void Input();
void Output()const;
private:
int hour, minute, second;
};
bool MYTIME::IsValid(int hour, int minute, int second)
{
return (hour >= 0 && hour <= 12)&&(minute >= 0 && minute <= 60)&&(second >= 0 && second <= 60);
}
MYTIME::MYTIME(int hour = 0, int minute = 0, int second = 0):hour(hour), minute(minute), second(second)
{
if(!IsValid(hour, minute, second))
{
cout<<"不正确的参数!"<<endl;
exit(EXIT_FAILURE);
}
}
void MYTIME::Input()
{
char c1, c2;
while(cin>>hour>>c1>>minute>>c2>>second, !cin||!IsValid(hour, minute, second)||c1 != ':'||c1 != c2)
{
cout<<"不正确的时间,请重新输入:";
if(!cin)cin.clear();//清错误标记
cin.sync();//清缓冲区
}
}
void MYTIME::Output()const
{
cout<<setfill('0')<<setw(2)<<hour<<":"<<setfill('0')<<setw(2)<<minute<<":"<<setfill('0')<<setw(2)<<second;
}
int main()
{
/*const MYTIME a(0, 0, 0);//定义常对象时必须进行初始化
cout << "a = "; a.Output(); cout << endl;
const MYTIME b(8);
cout << "b = "; b.Output(); cout << endl;
const MYTIME c(9, 15);
cout << "c = "; c.Output(); cout << endl;
const MYTIME d(10, 30, 45);
cout << "d = "; d.Output(); cout << endl;*/
MYTIME a;
cout << "a = ? "; a.Input();
cout << "a = "; a.Output(); cout << endl;
return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;
class MYTIME{
public:
static bool IsValid(int, int, int);
MYTIME();
MYTIME(int, int, int);
void Input();
void Output()const;
private:
int hour, minute, second;
};
bool MYTIME::IsValid(int hour, int minute, int second)
{
return (hour >= 0 && hour <= 12)&&(minute >= 0 && minute <= 60)&&(second >= 0 && second <= 60);
}
MYTIME::MYTIME():hour(0),minute(0),second(0)
{
}
MYTIME::MYTIME(int hour , int minute , int second ):hour(hour), minute(minute), second(second)
{
if(!IsValid(hour, minute, second))
{
cout<<"不正确的参数!"<<endl;
exit(EXIT_FAILURE);
}
}
void MYTIME::Input()
{
char c1, c2;
while(cin>>hour>>c1>>minute>>c2>>second, !cin
[解决办法]
!IsValid(hour, minute, second)
[解决办法]
c1 != ':'
[解决办法]
c1 != c2)
{
cout<<"不正确的时间,请重新输入:";
if(!cin)cin.clear();//清错误标记
cin.sync();//清缓冲区
}
}
void MYTIME::Output()const
{
cout<<setfill('0')<<setw(2)<<hour<<":"<<setfill('0')<<setw(2)<<minute<<":"<<setfill('0')<<setw(2)<<second;
}
int main()
{
/*const MYTIME a(0, 0, 0);//定义常对象时必须进行初始化
cout << "a = "; a.Output(); cout << endl;
const MYTIME b(8);
cout << "b = "; b.Output(); cout << endl;
const MYTIME c(9, 15);
cout << "c = "; c.Output(); cout << endl;
const MYTIME d(10, 30, 45);
cout << "d = "; d.Output(); cout << endl;*/
MYTIME a;
cout << "a = ? "; a.Input();
cout << "a = "; a.Output(); cout << endl;
return 0;
}
MYTIME::MYTIME(int hour = 0, int minute = 0, int second = 0):hour(hour), minute(minute), second(second)这句代码已经规定了 没有参数的时候默认用0,所以你又定义一个无参构造函数 会造成歧义