Jeśli cały kod jest kompilowany przy użyciu kompilatora C++, problem nie powinien być (lub bardzo mały).
Jeśli posiadasz C skompilowany z gcc i C++ skompilowanym za pomocą g ++, musisz napisać wrapper nagłówka wokół swojej klasy, aby kod C++ był widoczny przez zestaw funkcji.
Przykład:
MyClass.h
#ifdef __cplusplus
class MyClass
{
public:
MyClass() {/*STUFF*/}
~MyClass() {/*STUFF*/}
int doStuff(int x, float y) {/*STUFF*/}
};
extern "C" {
#endif
/* C Interface to MyClass */
void* createMyClass();
void destroyMyClass(void* mc);
int doStuffMyClass(void* mc, int x, float y);
#ifdef __cplusplus
}
#endif
Plik źródłowy
MyClass.cpp
#include "MyClass.h"
void* createMyClass() {return reinterpret_cast<void*>(new MyClass);}
void destroyMyClass(void* mc) {delete reinterpret_cast<MyClass*>(mc);}
int doStuffMyClass(void* mc, int x, float y)
{
return reinterpret_cast<MyClass*>(mc)->doStuff(x,y);
}
Twój kod C teraz właśnie to "MyClass.h" i wykorzystuje Zapewnione funkcje C.
MyCFile.c
#include "MyClass.h"
int main()
{
void* myClass = createMyClass();
int value = doStuffMyClass(myClass, 5, 6.0);
destroyMyClass(myClass);
}
AFAIK, nie można. Nie bez dostarczania wrapperów C dla funkcji C++ i eksponowania obiektów jako struktur/nieprzezroczystych wskaźników. (No cóż, używanie wskaźników w C++ jest "złe".) – millimoose