假设有一个C ++类定义如下,
reloadData()
然后我想在C中实现/* goo.h */
#ifdef __cplusplus
class goo{
public:
vector<int> a;
vector<int> b;
void calc();
};
#else
typedef struct goo goo;
#endif
#ifdef __cplusplus
extern "C" {
#if defined(__STDC__) || defined(__cplusplus)
void goo_calc(goo *);
#endif
#ifdef __cplusplus
}
#endif
,所以我写下面的代码。
goo::calc()
但是/* goo_cpp.cpp */
#include "goo.h"
void goo::calc(){
goo_calc(this);
}
/* goo_c.c */
#include "goo.h"
void goo_calc(goo *g){
/* do something with g->a and g->b */
}
说gcc
,那是什么错?
更新:
假设goo has no fields named a and b
被vector<int> a
取代,int a[3]
被vector<int> b
取代。
从C函数访问int b[3]
和goo->a
是否正确?
答案 0 :(得分:4)
您需要在C ++翻译单元中实现goo_calc
,并使用C语言链接。
// goo_cpp.cpp
extern "C" void goo_calc(goo *g){
/* do something with g->a and g->b */
}
除了C ++翻译单元之外,没有其他方法可以使用C ++类型。