我有以下文件。
foo.h(C++头文件) foo.mm(C ++文件) test_viewcontroller.h(Objective C头文件) test_viewcontroller.m(Objective C文件)
我在foo.h中声明了一个名为donothing()的方法,并在foo.mm中定义它。它是这样的:
double donothing(double a) { return a; }
现在,我尝试在test_viewcontroller.m中调用此函数:
double var = donothing(somevar);
我得到链接器错误,错误信息为“无法找到符号”_donothing()在test_viewcontroller.o中,collect2:ld返回1个退出状态。
请问有谁能指出问题出在哪里吗?
foo.h(C++头文件) foo.mm(C ++文件) test_viewcontroller.h(Objective C头文件) test_viewcontroller.m(Objective C文件)
我在foo.h中声明了一个名为donothing()的方法,并在foo.mm中定义它。它是这样的:
double donothing(double a) { return a; }
现在,我尝试在test_viewcontroller.m中调用此函数:
double var = donothing(somevar);
我得到链接器错误,错误信息为“无法找到符号”_donothing()在test_viewcontroller.o中,collect2:ld返回1个退出状态。
请问有谁能指出问题出在哪里吗?
#ifdef __cplusplus
extern "C"
{
char UTMLetterDesignator(double Lat);
NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting);
double test(double a);
}
#endif
@Carl
我已经包含了我的代码示例。你是在说我只需要将test()方法放在ifdef中吗?我不明白这有什么区别。你能否解释一下?
extern "C"
- 这意味着将其包装在#ifdef __cplusplus
块中。 - Carl Norum#ifdef
块太大了。只将extern "C"
放在#ifdef
内部,而不是整个函数声明。 - Carl Norum