0

|55|error: no match for 'operator<<' in 'std::cout << DetermineElapsedTime(((const MyTime*)(& tm)), ((const MyTime*)(& tm2)))'|

coutはそれを正しく出力する方法を理解していないことに気づきました。しかし、現時点では私もそうしません。

これが私のコードです。問題はずっと底の近くにあります。

#include <iostream>
#include <cstdlib>
#include <cstring>


using namespace std;
struct MyTime { int hours, minutes, seconds; };
MyTime DetermineElapsedTime(const MyTime *t1, const MyTime *t2);

const int hourSeconds = 3600;
const int minSeconds = 60;
const int dayHours = 24;

MyTime DetermineElapsedTime(const MyTime *t1, const MyTime *t2)
{
    long hourDiff = ((t2->hours * hourSeconds) - (t1->hours * hourSeconds));
    int timeHour = hourDiff / hourSeconds;
    long minDiff = ((t2->minutes * minSeconds) - (t1->minutes * minSeconds));
    int timeMin = minDiff / minSeconds;
    int timeSec = (t2->seconds - t1 -> seconds);
    MyTime time;
    time.hours = timeHour;
    time.minutes = timeMin;
    time.seconds = timeSec;
    return time;
}


main(void)
{
    char delim1, delim2;
    MyTime tm, tm2;
    cout << "Input two formats for the time. Separate each with a space. Ex: hr:min:sec\n";
    cin >> tm.hours >> delim1 >> tm.minutes >> delim2 >> tm.seconds;
    cin >> tm2.hours >> delim1 >> tm2.minutes >> delim2 >> tm2.seconds;

    if (tm2.hours <= tm.hours && tm2.minutes <= tm.minutes && tm2.seconds <= tm.seconds)
        {
            tm2.hours += dayHours;
        }
    cout << DetermineElapsedTime(&tm, &tm2); // Problem is here

    return 0;

}

また、必要に応じて経過時間を01:01:01として出力する方法についてのヒントはありますか?私はsetfillについて知っています..やや。

4

2 に答える 2

3

MyTimeは構造体です。このタイプの<<演算子をオーバーロードします

std::ostream& operator<< (ostream& os, const MyTime& m) {
       os << m.hours << ":" << m.minutes << ":" << m.seconds;
       return os;
}  
于 2012-11-12T08:19:50.977 に答える
1

MyTime構造体のストリーム演算子を宣言する必要があります。

struct MyTime
{
    int hours, minutes, seconds;
    friend ostream& operator<<(ostream& sm)
    {
         sm << "hours: "<<hours<<" seconds: "<<seconds<<" minutes: "<<minutes;
         return sm;
    }
};

構造体を変更できない場合は、free演算子を宣言します。

ostream& operator<<(ostream& sm, const MyTime& my_time)
{
     sm << "hours: "<<my_time.hours<<" seconds: "<<my_time.seconds<<" minutes: "<<my_time.minutes;
     return sm;
}
于 2012-11-12T08:20:41.377 に答える