gpt4 book ai didi

iphone - 从 Objective C 调用 C++ 方法

转载 作者:太空狗 更新时间:2023-10-30 03:18:39 26 4
gpt4 key购买 nike

我有以下文件。

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);

我收到链接器错误,在 test_viewcontroller.o 中显示“找不到符号”_donothing()
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

@卡尔

我已经包含了我的代码示例。是说我只需要在 ifdef 中包装 test() 方法。我不明白它能带来什么不同。你能解释一下吗?

最佳答案

test_viewcontroller.m 正在为 donothing() 寻找非 C++ 损坏的符号名称。将其扩展名更改为 .mm 就可以了。或者,在编译 C++ 文件时,将 extern "C" 声明放在 foo.h 中的方法声明上。

你想让它看起来像这样:

foo.h:

#ifdef __cplusplus
extern "C" {
#endif

double donothing(double a);

#ifdef __cplusplus
}
#endif

foo.mm:

#include "foo.h"

double donothing(double a)
{
return a;
}

test_viewcontroller.m:

#import "foo.h"

- (double)myObjectiveCMethod:(double)x
{
return donothing(x);
}

关于iphone - 从 Objective C 调用 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com