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