Я пытаюсь получить доступ к классу С++ и вызывать его метод из файла .c.
Я google эту тему и найти это http://developers.sun.com/solaris/articles/mixing.html
В нем говорится:
Вы можете написать
extern "C"функции в С++, которые будут обращаться к классамMи вызвать их из C-кода.
Вот функция С++, предназначенная для вызова функции-члена foo:
extern "C" int call_M_foo(M* m, int i) { return m->foo(i); }
Мой вопрос в том, где я могу разместить строку about? В моем файле С++ .h? Или C .h файл?
И это продолжается и говорит:
Вот пример кода C, который использует класс M:
struct M; // you can supply only an incomplete declaration
int call_M_foo(struct M*, int); // declare the wrapper function
int f(struct M* p, int j) // now you can call M::foo
{
return call_M_foo(p, j);
}
Но как/где я должен создать класс M в моем C файле?
И где я могу поставить вышеприведенный код? C .h файл? С++ .h файл? Или C .c файл?
Спасибо.
Спасибо за подробный ответ GMan.
Я следовал твоему предложению. Но я получаю ошибку компиляции в моем файле .c.
main.c: 33:
./some_class.h:24: error: expected '=,', ';,' asm или ' атрибут до' token
./some_class.h:25: error: expected ') перед' токеном
./some_class.h:26: error: expected ') перед' * токеном
И вот моя строка some_class.h 24-26:
#ifdef __cplusplus
class M {
public:
M();
virtual ~M();
void method1(char* name, char* msg);
};
extern "C" {
#else
struct M;
#endif
/* access functions line 24-26 are here*/
M* M_new(void);
void M_delete(M*);
void M_method1(M*, char*, char*);
#ifdef __cplusplus
}
#endif
По какой-то причине мой компилятор C не любит extern "C" в GMan оригинале some_test.h. Поэтому я должен изменить это выше. Похоже, компилятор C не любит/понимает строку struct M;.
Любая идея будет высоко оценена.