函数编译时出错,说没有适合的默认构造函数可使用,自己加了个构造函数,又说函数重载有歧义,小弟我郁闷了,C++新手,求指教!
函数编译时出错,说没有适合的默认构造函数可使用,自己加了个构造函数,又说函数重载有歧义,我郁闷了,C++新手,求指教!!!
这是我没加构造函数之前的,后来自己加了一个无参数的构造函数,赋了三个数据成员初值,结果就说函数重载有歧义,是怎么回事啊
这是我后来自己加的构造函数
MYTIME::MYTIME():hour(0), minute(0), second(0)
{
}
是哪里出错了呢?求指教!
------解决方案--------------------
MYTIME::MYTIME():hour(0), minute(0), second(0)
MYTIME::MYTIME(int hour = 0, int minute = 0, int second = 0):hour(hour), minute(minute), second(second)
这两个函数无法区分
都是可以不用参数就可以调用
改成这样看看
MYTIME::MYTIME(int hour, int minute = 0, int second = 0):hour(hour), minute(minute), second(second)
------解决方案--------------------
把 MYTIME(int, int, int); 的声明和定义(以及默认参数)合并在一起。
------解决方案--------------------
MYTIME::MYTIME(int hour = 0, int minute = 0, int second = 0):hour(hour), minute(minute), second(second) //定义的时候加默认参数?这肯定报错 默认参数请放到声明中.
------解决方案--------------------
#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;
}
这是我没加构造函数之前的,后来自己加了一个无参数的构造函数,赋了三个数据成员初值,结果就说函数重载有歧义,是怎么回事啊
这是我后来自己加的构造函数
MYTIME::MYTIME():hour(0), minute(0), second(0)
{
}
是哪里出错了呢?求指教!
C++
构造函数
------解决方案--------------------
MYTIME::MYTIME():hour(0), minute(0), second(0)
MYTIME::MYTIME(int hour = 0, int minute = 0, int second = 0):hour(hour), minute(minute), second(second)
这两个函数无法区分
都是可以不用参数就可以调用
改成这样看看
MYTIME::MYTIME(int hour, int minute = 0, int second = 0):hour(hour), minute(minute), second(second)
------解决方案--------------------
把 MYTIME(int, int, int); 的声明和定义(以及默认参数)合并在一起。
------解决方案--------------------
MYTIME::MYTIME(int hour = 0, int minute = 0, int second = 0):hour(hour), minute(minute), second(second) //定义的时候加默认参数?这肯定报错 默认参数请放到声明中.
------解决方案--------------------
#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