Я пытаюсь интегрировать свой собственный маленький проект 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
Может кто-нибудь помочь мне объяснить, где это пошло не так? Может ли это быть из-за циклической ссылки на другой файл заголовка (но я не могу изменить его, так как это влияет на код других людей). как я могу избавиться от этой ошибки? Любая помощь высоко ценится! Благодарю.
Во-первых, вам нужно включить A.h
от C.h
или же C.m
,
Но, потому что функции, определенные в A.mm
компилируются с (Obj) C ++ компилятором, вам может потребоваться сделать их вызываемыми из C. Вы делаете это с помощью С связь. затем ParseFile()
должен вызываться из файла C.m. Например, в заголовочном файле:
extern "C"{
int ParseFile(const char *);
}
Вам нужно #include "A.h"
в C.m
, Ты звонишь ParseFile()
в C.m
,
Переименуйте расширение всех ваших файлов .m в .mm. Таким образом, вы можете напрямую вызывать функции cpp в ваших классах Objective-C без каких-либо оболочек.