C++ 类的构造后出现no matching function for call to,怎样解决?
#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED
#include <ctime>
class time1
{
public:
time1( time_t);
void setTime(int ,int ,int );
void printfUniversal();
private:
int hour;
int minute;
int second;
};
#endif // TIME_H_INCLUDED
类中的函数
#include <iostream>
#include "time.h"
#include <ctime>
#include <iomanip>
using namespace std;
time1::time1( time_t t1)
{
struct tm *p;
p=localtime(&t1);
cout << "the time is " << ctime(&t1) << endl;
hour = p->tm_hour;
minute = p->tm_min;
second = p->tm_sec;
}
void time1::setTime(int h,int m,int s)
{
hour=(h >=0 && hour <24 ) ? h:0;
minute = (m >=0 && m<60 ) ? m:0;
second = (s >=0 && s<60 ) ? s:0;
}
void time1::printfUniversal()
{
cout << setfill('0') << setw(2) << hour << ":"
<<setw(2) << minute << ":" << setw(2) << second;
}
#include <iostream>
#include <ctime>
#include "time.h"
using namespace std;
int main()
{
time1 t1;
cout << t1.printfUniversal();
cout << "\nHello world!" << endl;
return 0;
}
运行时出现错误是“no matching function for call to time1::time1”
求问各位大神,这是为什么? 展开
没有给time1编写默认构造函数,在类的定义里加一句time1():hour(0),minute(0),second(0){}
int main()
{
time1 t1; //并没有在类中添加基础的构造函数,这一行可以改成time1 t1(time_t对象)
cout << t1.printfUniversal();
cout << "\nHello world!" << endl;
return 0;
}
//
class time1
{
public:
time1(); //加一行 然后再Cpp中写实现
time1( time_t);
void setTime(int ,int ,int );
void printfUniversal();
private:
int hour;
int minute;
int second;
};
扩展资料:
注意事项
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
构造函数的格式为:
<ClassType>(<List>)
{ //Do something...}
<ClassType> 为类的名字
<List> 为参数列表
在类创建的时候,都会调用构造函数,但是有的时候不写自己的构造函数的话, 系统会调用默认的构造函数 (也就是什么都不做),但是当写了构造函数后, 系统就不会调用默认的构造函数,构造函数的声明必须写在类中, 但是实现可以写在外头 (如果不知道如何将成员函数外部实现的看这里):
class Student
{
string name;
public:
Student(string)
};
Student::Student(string name)
{
this->name=name;//这里可以直接访问类的成员
}
备注: 在第9行用到了 this 指针
这样一来, 在声明类的时候, 可以调用构造函数, 其格式为:
<ClassType> 变量名(<List>)
<List> 指该类的构造函数的参数列表
构造函数必须这样写, 不得写在声明后的其余地方
#include <iostream>
#include <string>
using namespace std;
class Student
{
string name;
public:
Student(string);
string GetName();
};
Student::Student(string name)
{
this->name=name;
}
string Student::GetName()
{
return name;
}
int main()
{
Student s;
s.Student("TweeChalice");//Error!!!
cout<<s.GetName()<<endl;
}
{
time1 t1; //你并没有在类中添加基础的构造函数 这一行可以改成time1 t1(time_t对象)
cout << t1.printfUniversal();
cout << "\nHello world!" << endl;
return 0;
}
//===================
class time1
{
public:
time1(); //加一行 然后再Cpp中写实现
time1( time_t);
void setTime(int ,int ,int );
void printfUniversal();
private:
int hour;
int minute;
int second;
};
不可以将time1(time_t)作为构造函数吗?
加了参数之后,还是运行不了。。
在类的定义里加一句time1():hour(0),minute(0),second(0){}试试
能不能将time1(time_t)作为构造函数来进行初始化?