我创建了一个代码,使用构造函数将时间转换为分钟和秒。在输出中,我在几秒钟内得到时间,但它没有以分钟显示时间,并且无法弄清楚我的错误,所以任何人都可以帮助我...
#include<iostream>
using namespace std;
class Time
{
public:
Time(int);
Time(float);
};
Time::Time(int t)
{
cout << "Time in seconds: " << t*60*60 << "\n";
}
Time::Time(float t)
{
cout << "Time in Minutes: " << int(t*60) << "\n";
}
int main()
{
int hr;
cout << "Enter the time in Hours: ";
cin >> hr;
Time t1(hr);
Time t2(float(hr));
}
答案 0 :(得分:3)
你没有正确地进行类型转换。您需要通过将所需类型放在括号中来进行类型转换, not 通过尝试将其用作函数来进行类型转换。例如,您需要这样做:
Time t2((float) hr);
cout << "Time in Minutes: " << (int) t*60 << "\n";
虽然Time t2(float(hr));
是合法的,但它是一个函数原型,因为它是vexing parse。它相当于Time t2(float hr);
,这意味着t2
是一个函数,它将float
称为“hr”并返回Time
。这没有任何效果,因为从未实现或调用过这样的函数。
如果这看起来很荒谬,那么可以考虑一下这可以提供帮助。请考虑以下代码:
Time t2 (float (*hr));
显然,这是将t2
声明为一个函数的非常正常的方法,该函数将指针指向名为“hr”的float
。那么,如果没有*
,它不应该合法吗?而C ++语法规则是,如果某些东西可以成为原型,那就是。
答案 1 :(得分:1)
应该有效:
Time t2((float)hr);
答案 2 :(得分:0)
Time::Time(int hour){
cout << "Time in seconds: " << hour*60*60 << "\n";
cout << "Time in minutes: " << hour*60 << "\n";
}
答案 3 :(得分:-1)
尝试添加
Time::Time(float t)
{
cout << "Time in Minutes: " << float(t*60) << "\n";
}
告诉我它是否有效..