[英]C++ and Objective-C
我需要在我的项目中使用C ++文件,它称为CAXException.hpp
,并且项目目标中的行“编译源为”-“根据文件类型”而不是Objective-C ++。 但是,在编译时,它总是向我显示错误error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CAXException'
代码中的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 ++中实现一个简单地委派给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标头,而不是C ++标头。
class CAXException //<-------error here
{};
^^^
你错过了;
而且您的编译器似乎无法识别C ++关键字class
,这很奇怪。 您很可能缺少一些东西;
在此类定义或其他语法错误之前,但在此之前。
该标头可能是从Objective-C(.m扩展名)源代码文件中包含的。 包含该标头的源代码文件必须是目标c ++,即以.mm结尾,或者您可以通过显式更改“将源代码编译为...”设置来强制目标c ++。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.