tm t1 имеет неполный тип и не может быть определена - PullRequest
2 голосов
/ 29 ноября 2011

Я должен написать программу, которая вызывает sleep(60) в бесконечном цикле. Каждые пять раз в цикле я должен выбирать текущее время дня и печатать поле tm_sec.

Вот что я написал:

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>

int main()
{
    struct tm t1;
    int i=0;
    for(;;)
    {
        sleep(60);
        if(i%5==0)
            {
                gettimeofday(&t1,NULL);
                printf("%d\n",t1.tm_sec);
            }
        i++;
    }
}

Я получаю сообщение об ошибке aggregate tm t1 has incomplete type and cannot be defined.

Я не знаю, что я делаю не так.

Ответы [ 3 ]

3 голосов
/ 29 ноября 2011

Вы хотите struct timeval, а не struct tm.Попробуйте это:

struct timeval t1;

Кроме того, вы хотите t1.tv_sec, а не t1.tm_sec.

2 голосов
/ 29 ноября 2011

Вы используете это неправильно. Выберите один из следующих двух:

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);

Или:

 #include <time.h>

 char *asctime(const struct tm *tm);
 struct tm *gmtime(const time_t *timep);
 struct tm *localtime(const time_t *timep);
1 голос
/ 29 ноября 2011

gettimeofday принимает указатель на timeval, а не tm, давая время в секундах (и микросекундах) с 1970 года.

Если вы хотите tm, тогда вам понадобитсяфункции из <ctime>, такие как localtime(), для преобразования поля секунд timeval.

...