2015-11-06 3 views
6

При выполнении программы PTHREAD в C с использованием Visual Studio 2015, я получил следующее сообщение об ошибке:TimeSpec ошибка переопределение

Error C2011 'timespec': 'struct' type redefinition 

Ниже мой код:

#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); 
} 

Файл заголовка pthread.h содержит следующий код, относящийся к сроку:

#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 */ 

Нет другого заголовка f ile, который я использую, использует структуру timespec, поэтому нет возможности переопределить. Нет никакого шанса на поврежденный файл заголовка, потому что он был загружен с веб-сайта с открытым исходным кодом pthread.

+0

какой линии, что ошибка происходит на? – user3386109

+0

@ user3386109 номер строки не указан, когда я нажимаю ошибку, она загружает следующее в pthreads cpp struct timespec { time_t tv_sec; long tv_nsec; }; –

+0

Ошибки всегда имеют имена файлов и номера строк. Но в любом случае я бы сказал, что либо файл проекта поврежден, либо файлы заголовков системы повреждены. Ни один из них не может быть диагностирован через Интернет. – user3386109

ответ

20

Pthreads-win32 (который я предполагаю, что вы используете) могут внутри включают time.h (time.h также обычно включаются другие библиотеки/заголовки) - и time.h уже заявляет timespec (кроме того, он делает это таким образом, совместимым с pthreads) - но у pthreads-win32 pthread.h нет действительных включенных охранников для этого случая (стыдно за них!). pthreads пытается объявить его, потому что ему это нужно внутренне, но, поскольку это возможно, ему не понадобится весь time.h, он пытается объявить только timespec, если это возможно. Тем не менее, вы можете просто добавить

#define HAVE_STRUCT_TIMESPEC 

перед тем #include <pthread.h> - что скажет заголовок Pthreads-win32, что у вас уже есть правильный timespec, и пусть ваш код скомпилировать должным образом.

В качестве альтернативы, если вы используете pthreads широко, вы можете отредактировать сам файл заголовка - просто добавьте, что #define HAVE_STRUCT_TIMESPEC к нему где-то ближе к началу, и вам хорошо идти.

Дальнейшее чтение: http://mingw-users.1079350.n2.nabble.com/mingw-error-redefinition-of-struct-timespec-td7583722.html

 Смежные вопросы

  • Нет связанных вопросов^_^