Fehler bei der Neudefinition der Zeitangabe [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Vijay Manohar

Beim Ausführen eines Pthread-Programms in C mit Visual Studio 2015 habe ich die folgende Fehlermeldung erhalten:

Error C2011 'timespec': 'struct' type redefinition

Folgendes ist mein Code:

#include<pthread.h>
#include<stdlib.h>
#include<stdio.h>


void *calculator(void *parameter);

int main(/*int *argc,char *argv[]*/)
{
    pthread_t thread_obj;
    pthread_attr_t thread_attr;
    char *First_string = "abc"/*argv[1]*/;
    pthread_attr_init(&thread_attr);
        pthread_create(&thread_obj,&thread_attr,calculator,First_string);

}
void *calculator(void *parameter)
{
    int x=atoi((char*)parameter);
    printf("x=%d", x);
}

Das pthread.h Die Header-Datei enthält den folgenden Code in Bezug auf die Zeitangabe:

#if !defined(HAVE_STRUCT_TIMESPEC)
#define HAVE_STRUCT_TIMESPEC
#if !defined(_TIMESPEC_DEFINED)
#define _TIMESPEC_DEFINED
struct timespec {
        time_t tv_sec;
        long tv_nsec;
};
#endif /* _TIMESPEC_DEFINED */
#endif /* HAVE_STRUCT_TIMESPEC */

Keine andere Header-Datei, die ich verwende, verwendet die timespec struct, also gibt es keine Möglichkeit der Neudefinition. Es besteht keine Chance auf eine beschädigte Header-Datei, da sie von der Open-Source-Website pthread heruntergeladen wurde.

  • In welcher Zeile ist dieser Fehler aufgetreten?

    – Benutzer3386109

    6. November 2015 um 0:40 Uhr

  • @ user3386109 Es wird keine Zeilennummer erwähnt. Wenn ich auf den Fehler klicke, wird Folgendes in pthreads cpp struct timespec {time_t tv_sec; lang tv_nsec; };

    – Vijay Manohar

    6. November 2015 um 0:42 Uhr


  • Fehler haben immer Dateinamen und Zeilennummern. Aber auf jeden Fall würde ich sagen, dass entweder die Projektdatei beschädigt ist oder die System-Header-Dateien beschädigt wurden. Beides lässt sich nicht über das Internet diagnostizieren.

    – Benutzer3386109

    6. November 2015 um 0:56 Uhr

  • @VijayManohar Das tust du. Indem Sie stdlib.h einschließen, schließen Sie sys/types.h ein. Was wiederum time.h beinhaltet. Ihr Problem ist im Wesentlichen das gleiche wie das verknüpfte … irgendwo in Ihrer Kette enthaltener Header gibt es widersprüchliche Definitionen der Timespec-Struktur.

    – Matt O

    6. November 2015 um 1:37 Uhr

  • Das erneute Posten einer Frage ist verpönt: stackoverflow.com/q/33114535/2336725 Arbeiten Sie mit dieser Frage und erklären Sie, warum diese Antwort nicht geholfen hat.

    – Tipimm

    6. November 2015 um 2:54 Uhr

pthreads-win32 (von dem ich annehme, dass Sie es verwenden) kann intern beinhalten time.h (time.h wird üblicherweise auch von anderen Bibliotheken/Headern eingebunden) – und time.h erklärt schon timespec (Außerdem tut es dies auf eine Weise, die mit pthreads kompatibel ist) – noch die pthreads-win32’s pthread.h hat nicht die gültigen Include-Wächter für diesen Fall (Schande über sie!). pthreads versucht, es zu deklarieren, weil es es intern braucht, aber da es möglich ist, wird es nicht das Ganze brauchen time.hes versucht nur die zu deklarieren timespec wenn möglich. Trotzdem können Sie einfach hinzufügen

#define HAVE_STRUCT_TIMESPEC

Vor #include <pthread.h> – das wird dem pthreads-win32-Header mitteilen, dass Sie bereits eine richtige haben timespecund lässt Ihren Code ordnungsgemäß kompilieren.

Wenn Sie pthreads häufig verwenden, möchten Sie alternativ möglicherweise die Header-Datei selbst bearbeiten – fügen Sie diese einfach hinzu #define HAVE_STRUCT_TIMESPEC dazu irgendwo in der Nähe des Anfangs, und Sie können loslegen.

Weiterlesen: http://mingw-users.1079350.n2.nabble.com/mingw-error-redefinition-of-struct-timespec-td7583722.html

1311150cookie-checkFehler bei der Neudefinition der Zeitangabe [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy