2012-01-05 11 views
-1

私は時間ヘッダをいじりしていますとエラーが発生している:単純なC++の時間プログラムエラー

invalid conversion from 'tm*' to 'time_t' 

私がしようとするとエラーが底にすべての方法以下のコードである場合あなたが見ることができますdifftime関数を使用します。私は愚かで違法な何かをやっているだけのIMを知っていますが、私はこれをどう回避することができないかを見ます。誰かが解決策を持っているなら私に知らせてください。ありがとう!

プログラムは、現在の時刻を取得し、ユーザーから時間を入力し、時間差を見つけるはずです。

コード:

#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 
    struct tm * cur_timeinfo_hold; 
    int year, month ,day,hour,minute,second; 
    double dif; 

    /* prompt user for time to be compared*/ 
    printf ("Enter year: "); scanf ("%d",&year); 
    printf ("Enter month: "); scanf ("%d",&month); 
    printf ("Enter day: "); scanf ("%d",&day); 
    printf ("Enter hour: "); scanf ("%d",&hour); 
    printf ("Enter minute: "); scanf ("%d",&minute); 
    printf ("Enter second: "); scanf ("%d",&second); 

    /* get current timeinfo*/ 
    time (&rawtime); 
    timeinfo = localtime (&rawtime); 
    /* print it */ 
    printf("The present time is: "); printf(asctime (timeinfo)); 

/* set current time into a new variable to use for difftime, since timeinfo, will be changed */ 
    cur_timeinfo_hold = timeinfo; 

    /* modify current timeinfo to the user's choice */ 
    timeinfo->tm_year = year - 1900; 
    timeinfo->tm_mon = month - 1; 
    timeinfo->tm_mday = day; 
    timeinfo->tm_hour = hour; 
    timeinfo->tm_min = minute; 
    timeinfo->tm_sec = second; 
    mktime (timeinfo); 
    /* and print it */ 
    printf ("time to compare: "); printf(asctime (timeinfo)); 

    /* find time difference */ 
//dif = difftime (cur_timeinfo_hold,timeinfo); //error: invalid conversion from 'tm*' to 'time_t' 

    return 0; 
} 

答えて

4

mktimeが機能です。 1つのパラメータ(tmポインタ)を受け入れ、値time_tを返します。 の引数をある型から別の型に変換しません。したがって、mktime(timeinfo)を呼び出した後、timeinfo変数はまだtmポインタです。

difftime関数は、二つのtime_t値を受信することを期待するので、cur_timeinfo_hold又はtimeinfoを受け付けません。彼らは間違ったタイプです。最初の変数の値は、rawtimeからlocaltimetmポインタに変換された値です。そのため、最初の変数に使用してください。後でmktime(timeinfo)を呼び出すと、time_tという値が返されましたが、戻り値は無視されました。戻り値を変数に代入し、2番目のdifftimeパラメータに使用できるようにします。

time_t info = mktime(timeinfo); 
// ... 
dif = difftime(rawtime, info); 
+0

ありがとう!それは働いた – darko

1

difftimeが生time_t値ではなく、struct tm構造を必要とするためにです。

プロトタイプは次のとおりです。

double difftime(time_t time1, time_t time0); 

は何をする必要がありますは、それがあるように、ユーザーが入力した情報を変換し、適切(何もそこに行っlocaltime)、その後をシステム時刻を残さないで同等のtime_tmktime(またはUTC時間で作業する場合はtimegm)。

次に、difftimeを使用してその違いを得ることができます。効果的には、次のようなものがあります。

time_t base, other; 
struct tm tms; 
double delta; 

time (&base);     // basetime is now. 
tms.blah = blah;     // for all blahs. 
other = mktime (&tms);   // get time_t for other time. 
delta = difftime (other, base); // get difference. 
関連する問題