【问题标题】:error C2664: 'pthread_create' : cannot convert parameter 3 from 'void *(__clrcall *)(void *)' to 'void *(__cdecl *)(void *)错误 C2664:“pthread_create”:无法将参数 3 从“void *(__clrcall *)(void *)”转换为“void *(__cdecl *)(void *)
【发布时间】:2016-01-15 21:13:58
【问题描述】:

我正在尝试使用 pthread 库。

这个错误的原因是什么?

错误 C2664: 'pthread_create' : 无法将参数 3 从 'void *(__clrcall *)(void *)' 转换为 'void *(__cdecl *)(void *)

这是我的代码:

pthread_create(&thread1,NULL,sub_m,(void *)data);

void *sub_m(void* data)

【问题讨论】:

  • 您是否有机会将您的代码编译为托管 C++?
  • 我正在使用 Visual Studio 2010
  • __clrcall 在您的错误消息中让我认为 C++ 项目的类型是托管 C++,而不是本机 C++。您打算在您的项目中使用 .NET Framework 吗?实际上,@toast 提供的解决方案应该可以工作,但禁用 C++/CLI 支持(前提是您不需要它)不需要显式指定调用约定。

标签: c++ visual-c++


【解决方案1】:

设为void __cdecl sub_m(void *data)。您处于托管代码中,因此您需要回到正确的调用约定。

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多