从 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?
不过,我的替代建议是,将 C 编译为 C++。有可能只需要很少的工作或不需要任何工作就可以变成有效的 C++。
我在 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?
不过,我的替代建议是,将 C 编译为 C++。有可能只需要很少的工作或不需要任何工作就可以变成有效的 C++。