如何从C函数访问C ++类数据成员

时间:2017-08-31 09:48:36

标签: c++ c

假设有一个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 bvector<int> a取代,int a[3]vector<int> b取代。

从C函数访问int b[3]goo->a是否正确?

1 个答案:

答案 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 ++类型。