Поле tv_sec не может быть разрешено

Я пытаюсь запустить следующий фрагмент кода, взятый из этого простого примера таймер:

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

int SetTimer(struct timeval &tv, time_t sec) {
    gettimeofday(&tv, NULL);
    tv.tv_sec += sec;

    return 1;
}

int CheckTimer(struct timeval &tv, time_t sec) {
    struct timeval ctv;
    gettimeofday(&ctv, NULL);

    if ((ctv.tv_sec > tv.tv_sec)) {
        gettimeofday(&tv, NULL);
        tv.tv_sec += sec;
        return 1;
    } else {
        return 0;
    }
}

int main() {
    struct timeval tv;
    SetTimer(tv, 5); //set up a delay timer
    printf("start counting.\n");
    while (1)
        if (CheckTimer(tv, 5) == 1)
            printf("Welcome to cc.byexamples.com\n");
    return 0;
}

Я получаю следующую ошибку: поле tv_sec не может быть разрешено

Я искал его в Интернете, но никто, кажется, не дает конкретного ответа.

Я попытался изучить библиотеки sys/time.h и time.h, но ни в одной из них эта структура не определена, но все равно используется.

Я пропустил какую-либо библиотеку? Поскольку этот пример довольно старый, изменилось ли что-то, что нужно сделать по-другому? Я был бы признателен за любое зрелище.

PS: я использую Eclipse CDT Indigo под Ubuntu 11.10 и g++ 4.6.1.


person Andres Felipe    schedule 20.06.2013    source источник
comment
Пожалуйста, включите код в свой вопрос (по ссылке, на которую вы указали, есть как минимум два примера кода) и покажите нам точное сообщение об ошибке, включая указанный номер строки. Первый пример компилируется для меня с помощью g++ (после того, как я изменил &gt; на > из-за проблемы с копированием и вставкой).   -  person Keith Thompson    schedule 23.08.2013


Ответы (2)


попробуйте поместить это в свой файл: #define __USE_GNU

person Shar    schedule 20.06.2013
comment
Спасибо за ваш ответ, но я уже пробовал это, поскольку структура кажется доступной только тогда, когда существует такое определение, но это дает мне следующее: предупреждение: __USE_GNU переопределено [включено по умолчанию] - person Andres Felipe; 24.06.2013

В конце концов, это была проблема Eclipse, поскольку она не смогла проиндексировать библиотеку time.h. Я решил это, следуя наиболее одобренному ответу этот другой вопрос SF:

Добавление вручную time.h в индексатор C/C++.

В настоящее время я использую Eclipse CDT Juno, и проблема больше не возникает. В качестве побочного комментария в Eclipse CDT Juno я не смог найти место, где можно вручную отредактировать настройки индексатора C/C++.

person Andres Felipe    schedule 23.08.2013