首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Timespec重定义错误

Timespec重定义错误
EN

Stack Overflow用户
提问于 2015-11-06 00:39:19
回答 1查看 35.1K关注 0票数 22

在使用Visual 2015在C中执行P线程程序时,我得到了以下错误:

代码语言:javascript
运行
复制
Error C2011 'timespec': 'struct' type redefinition

以下是我的代码:

代码语言:javascript
运行
复制
#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头文件包含以下与timespec相关的代码:

代码语言:javascript
运行
复制
#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 */

我使用的其他头文件没有使用timespec结构,因此不可能重新定义。不可能有损坏的头文件,因为它已经从网站下载。

EN

回答 1

Stack Overflow用户

发布于 2016-05-06 12:13:24

线程-win32 32(我假设您正在使用)内部可能包括time.h (time.h通常也被其他库/头包括在内)- time.h已经声明了timespec (同时,它以一种与p线程兼容的方式来声明timespec)--然而,对于这种情况,win32 32的pthread.h没有有效的包含保护(可耻!)线程试图声明它,因为它在内部需要它,但是由于它可能不需要整个time.h,所以它尝试只在可能的情况下声明timespec。尽管如此,您仍然可以简单地添加

代码语言:javascript
运行
复制
#define HAVE_STRUCT_TIMESPEC

#include <pthread.h>之前--这将告诉proper 32头,您已经有了一个正确的timespec,并允许您的代码正确编译。

或者,如果您正在广泛地使用p线程,您可能希望编辑头文件本身--只需将#define HAVE_STRUCT_TIMESPEC添加到开头的某个地方,就可以了。

进一步阅读:http://mingw-users.1079350.n2.nabble.com/mingw-error-redefinition-of-struct-timespec-td7583722.html

票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33557506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档