gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:17 24 4
gpt4 key购买 nike

假设有一个 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()在 C 中,所以我编写了以下代码。

/* 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 */
}

但是gccgoo has no fields named a and b ,那怎么了?


更新:

假设vector<int> aint a[3] 取代, 和 vector<int> bint b[3] 取代.

访问 goo->a 是否正确?和 goo->b来自 C 函数?

最佳答案

您需要在 C++ 翻译单元中实现 goo_calc,并与 C 语言链接。

// goo_cpp.cpp
extern "C" void goo_calc(goo *g){
/* do something with g->a and g->b */
}

除了在 C++ 翻译单元中,没有其他方法可以使用 C++ 类型。

关于c++ - 如何从 C 函数访问 C++ 类数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45978386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com