вызов функции .cpp в файле .m и .mm, ошибка

Я пытаюсь интегрировать свой собственный маленький проект cpp в большой проект target-c. Я скомпилировал свой собственный проект в файл .dylib и добавил в большой проект, и файл .h включен. Но чтобы следовать наследию, мне нужно вызвать мою функцию из файла .m в большом проекте.

я знаю, что .m файл не может вызывать функции cpp, поэтому я попытался включить мой файл cpp .h в другой файл .mm, затем в свой файл .m я включил заголовочный файл в файл .mm. вот что я сделал:

A.mm (я создал этот файл вместе с заголовком)

#import "A.h"#include "mycppfunc.h"int ParseFile(char * filename)
{
....(using cpp functions)
return 0;
}

хиджры

int ParseFile(char* filename);

B.mm (изначально в большом проекте)

#import "B.h"#import "A.h".... (original codes in B.mm)

B.h

#import "C.h"....

C.m (изначально в большом проекте, я должен вызывать свои собственные функции отсюда из-за наследства)

#import "C.h"#import "B.h"....
- (IBAction) call_my_proj: (id) sender
{
....
ParseFile("myfile.txt");
}

C.h

.... (this file is un-changed)

Когда я компилирую, я получил эту ошибку:

Implicit declaration of function 'ParseFile' is invalid in C99

Может кто-нибудь помочь мне объяснить, где это пошло не так? Может ли это быть из-за циклической ссылки на другой файл заголовка (но я не могу изменить его, так как это влияет на код других людей). как я могу избавиться от этой ошибки? Любая помощь высоко ценится! Благодарю.

0

Решение

Во-первых, вам нужно включить A.h от C.h или же C.m,

Но, потому что функции, определенные в A.mm компилируются с (Obj) C ++ компилятором, вам может потребоваться сделать их вызываемыми из C. Вы делаете это с помощью С связь. затем ParseFile() должен вызываться из файла C.m. Например, в заголовочном файле:

extern "C"{
int ParseFile(const char *);
}
0

Другие решения

Вам нужно #include "A.h" в C.m, Ты звонишь ParseFile() в C.m,

1

Переименуйте расширение всех ваших файлов .m в .mm. Таким образом, вы можете напрямую вызывать функции cpp в ваших классах Objective-C без каких-либо оболочек.

0
По вопросам рекламы [email protected]