gpt4 book ai didi

C++ 和 Objective-C

转载 作者:行者123 更新时间:2023-11-27 23:28:53 24 4
gpt4 key购买 nike

我需要在我的项目中使用 C++ 文件,它称为 CAXException.hpp,并且项目目标中的行“编译源为”-“根据文件类型”而不是 Objective-C++。但是在编译时它总是显示错误 error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CAXException'在代码中:

class CAXException //<-------error here

{}

请帮我修复它..

最佳答案

如果我没理解错的话,你有一个 C++ 头文件 (.hpp),你想从 Objective-C 文件中包含它。不幸的是,您不能直接这样做。您必须使用解决方法。

最简单的方法是更改​​包含此 C++ 头文件(直接或间接)的每个 Objective-C 文件 (.m) 的编译选项,以将其编译为 Objective-C++文件。这可以通过将文件重命名为 .mm 扩展名或通过更改文件的编译器选项来完成。

如果这对你有用,这将是最简单的,但是 Objective-C++ 不是 Objective-C 的完整超集(因为 C++ 不是 C 的超集),并且一些有效的 Objective-C 是无效的 Objective-C++ (如果使用 C++ 关键字作为变量名称)。

如果发生这种情况,您将必须为该类创建一个 Objective-C 包装器,并使用 Objective-C++ 中的实现简单地委托(delegate)给 C++ 类。即创建一个 CAXExceptionWrapper.h Objective-C 文件,其中包含如下内容:

@interface CAXExceptionWrapper {
@private
void* _CAXExceptionImpl;
}
- (id)init;
// ...
@end

还有一个 `CAXExceptionWrapper.mm' Objective-C++ 文件包含:

@import "CAXException.hpp"
@implementation CAXExceptionWrapper
- (id)init {
if ((self = [super init])) {
_CAXException = new CAXExceptionWrapper;
}
return self;
}
// ...
@end

然后在您的 Objective-C 文件中,包含包装器 Objective-C header 而不是 C++ header 。

关于C++ 和 Objective-C ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7258175/

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