将时间转换为分钟和秒

时间:2015-04-15 07:58:06

标签: c++ oop most-vexing-parse

我创建了一个代码,使用构造函数将时间转换为分钟和秒。在输出中,我在几秒钟内得到时间,但它没有以分钟显示时间,并且无法弄清楚我的错误,所以任何人都可以帮助我...

#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));
}

4 个答案:

答案 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";
}

告诉我它是否有效..