C++ 类的构造后出现no matching function for call to,怎样解决?

创建类time1,:#ifndefTIME_H_INCLUDED#defineTIME_H_INCLUDED#include<ctime>classtime1{publi... 创建类time1,:
#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”

求问各位大神,这是为什么?
展开
 我来答
大野瘦子
高粉答主

2019-10-18 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:35万
展开全部

没有给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;

}

小鑫聊两性
推荐于2017-10-04 · 与大家聊聊年轻男女之间的那些事儿
小鑫聊两性
采纳数:184 获赞数:921

向TA提问 私信TA
展开全部
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;
};
追问
不可以将time1(time_t)作为构造函数吗?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
9527坏蛋
2014-04-29 · TA获得超过615个赞
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:61.3万
展开全部
很明显构造函数需要参数,而time1 t1;又没有参数,所以报错了
追问
加了参数之后,还是运行不了。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5e8499c
2014-04-29 · TA获得超过556个赞
知道小有建树答主
回答量:280
采纳率:100%
帮助的人:311万
展开全部
你没有给time1编写默认构造函数……
在类的定义里加一句time1():hour(0),minute(0),second(0){}试试
追问
能不能将time1(time_t)作为构造函数来进行初始化?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式