繁体   English   中英

如何在Objective C ++标头中包含C ++标头?

[英]How to include C++ headers in an Objective C++ header?

我有一个.cpp / .hpp文件组合 - > .hpp文件有#include ..

我也有一个.mm / .h文件组合 - >如果我在.mm目标C ++文件中包含.hpp文件,则没有问题。 但是,如果我尝试在.h(Objective C标头)文件中包含.hpp文件,我会收到预处理器问题'找不到iostream'。

除了做一些时髦的东西,比如在我的Objective C .h文件中有一个void *然后把它作为包含在.mm中的类型或者包装在Objective C ++类型中的每个C ++类型之外,还有什么方法吗?

我的问题与托尼的问题基本相同(但没有人回答他):

https://stackoverflow.com/questions/10163322/how-to-include-c-header-file-in-objective-c-header-file

问题是您必须避免标头中的所有C ++语义,以允许普通的Objective-C类包含它。 这可以使用不透明指针来完成。

CPPClass.h

class CPPClass
{
public:
    int getNumber()
    {
        return 10;
    }
};

ObjCPP.h

//Forward declare struct
struct CPPMembers;

@interface ObjCPP : NSObject
{
    //opaque pointer to store cpp members
    struct CPPMembers *_cppMembers;
}

@end

ObjCPP.mm

#import "ObjCPP.h"
#import "CPPClass.h"

struct CPPMembers {
    CPPClass member1;
};

@implementation ObjCPP

- (id)init
{
    self = [super init];
    if (self) {
        //Allocate storage for members
        _cppMembers = new CPPMembers;

        //usage
        NSLog(@"%d", _cppMembers->member1.getNumber());
    }

    return self;
}

- (void)dealloc
{
    //Free members even if ARC.
    delete _cppMembers;

    //If not ARC uncomment the following line
    //[super dealloc];
}

@end

要在Objective-C ++头文件中使用C ++,请确保:

  1. 有.h / .mm情侣(Objective-C ++)
  2. 在文件的标识中,将类型设置为Objective-C ++ Source(它应该是自动的)
  3. 仅包含Objective-C ++源文件中的考虑文件。 这一点很明显,但很快就会被遗忘,难以追查

#include指令只包含文本; Objective C抱怨的唯一时间是包含文件中的某些内容是否无效Objective C.

在你的情况下,它给你答案; 目标C中找不到iostream.h头文件。查找引用此文件的位置并删除#include。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM