从 C src 调用 C++ 函数

Calling C++ functions from a C src

我在 MS Visual Studio 2010 项目中使用了 C/C++ 的混合代码库,并且正在尝试从 C src 文件调用 C++ 文件中定义的静态函数。现在我通过将 C src 重命名为 CPP (a.c -> a.cpp) 来让它工作无需对代码库进行任何大规模手术(如使用 this 线程中建议的不透明指针)

请注意我的代码库非常复杂,我创建了这个小的 VS 代码片段以使用最少的可演示代码重现错误

a.c

#include "b.h"

void test()
{
  B::func();
}

b.h

#ifdef __cplusplus
extern "C" {
#endif

class B{
public:
  static void func();
};

#ifdef __cplusplus
}
#endif

b.cpp

#include "b.h"

#ifdef __cplusplus
extern "C" {
#endif

void B::func()
{
  return;
}

#ifdef __cplusplus
}
#endif

错误:- MS Visual Studio 2010

1>c:\.....\b.h(5): error C2061: syntax error : identifier 'B'
1>c:\.....\b.h(5): error C2059: syntax error : ';'
1>c:\.....\b.h(5): error C2449: found '{' at file scope (missing function header?)
1>c:\.....\b.h(8): error C2059: syntax error : '}'

首先,:: 在 C 中无效。

其次,包含一个header相当于copy-pasting一个.h文件到你的C文件中。您的 header 必须是有效的 C。这里有一些更深入的见解:

How to call C++ function from C?

Elegantly call C++ from C

不过,我的替代建议是,将 C 编译为 C++。有可能只需要很少的工作或不需要任何工作就可以变成有效的 C++。