Вы не можете получить доступ к классам из C ++ в C без какого-либо косвенного обращения и / или интерфейса. Если вы действительно хотите использовать его в C (почему?), Вам придется придумать какой-то внешний интерфейс "C" для вашего объекта.
например. реализовать некоторый cinterface.h:
#ifdef __cplusplus
extern "C" {
#endif
// It does not have to be void* but at this point it is the easiest thing to use.
typedef void * ObjCType;
ObjCType obj_get_obj (void);
int obj_get_value(ObjCType);
#ifdef __cplusplus
};
#endif
А затем в cinterface.cpp реализовать интерфейс языка C, делегирующий функции-члены Obj .:
#include <obj.hpp>
#include <cinterface.h>
// This is defined somewhere else.
extern Obj obj;
ObjCType obj_get_obj ()
{
return &obj;
}
int obj_get_value(ObjCType o)
{
return static_cast<Obj*>(o)->get_value ();
}
И, наконец, используйте интерфейс C в вашем source.c:
#include <cinterface.h>
int main ()
{
ObjCType o = obj_get_obj ();
int x = obj_get_value (o);
}