我正在尝试将我自己的小型cpp项目整合到一个大型的Objective-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;
}
A.H
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 :(得分:1)
您需要#include "A.h"
中的C.m
。您在ParseFile()
中呼叫C.m
。
答案 1 :(得分:0)
将所有.m文件的扩展名重命名为.mm。这样你就可以在没有任何包装器的情况下直接调用objective-C类中的cpp函数。
答案 2 :(得分:0)
首先,您需要在A.h
或C.h
中加入C.m
。
但是,因为A.mm
中定义的函数是使用(Obj)C ++编译器编译的,所以您可能需要从C调用它们。您可以使用C linkage执行此操作。然后应该从C.m文件中调用ParseFile()
。例如,在头文件中:
extern "C"
{
int ParseFile(const char *);
}