我一直在关注如何从 C 调用 C++ 对象的成员函数的指南。据我了解,C 代码应该将类解释为同名的结构,并且每当它想调用函数时通过此类的对象,它应该使用中间回调函数。标题如下所示:
// CInterface.h
#ifdef __cplusplus
...
class CInterface
{
public:
...
void OnMessage(U8* bytes); // I want to call this function from C.
private:
...
};
#else
typedef
struct CInterface
CInterface;
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__STDC__) || defined(__cplusplus)
//extern void c_function(CInterface*); /* ANSI C prototypes (shouldn't be needed) */
extern CInterface* cpp_callback_function(CInterface* self, unsigned char * bytes);
#else
//extern void c_function(); /* K&R style (shouldn't be needed) */
extern CInterface* cpp_callback_function(unsigned char * bytes);
#endif
#ifdef __cplusplus
}
#endif
现在失败的 C 代码如下所示: // main.c #include "CInterface.h"
int main(int argc, char* argv[])
{
void* ptr;
int *i = ptr; // Code that only compiles with a C compiler
CInterface cinterface; // This should declare a struct
}
错误是:错误 C2079:'cinterface' 使用未定义的结构 'CInterface'。
听起来头文件被读取为 c++ 代码,因为结构没有定义,但是 main.c 是由 C 根据 Visual Studio 编译的(我还通过添加一些特定于 C 的代码仔细检查了这一点)。但是,如果我添加这样的括号:
CInterface cinterface();
代码编译对我来说毫无意义,因为它现在是一个不应该在 C 中工作的对象。
回调函数在第三个文件 CInterface.cpp 中实现,它充当“中间体”。
所以问题是我如何解决这个错误消息,或者我是否把整个方法弄错了。这是我第一次混合 C/C++ 代码,而且我对这两种语言都比较陌生。