不同的c++ include语句会在Objective-C头文件中抛出错误



我试图在objective - c++代码中使用OpenCV,我将从Swift调用。首先,我将这个答案用于连接Objective-C和Swift。在这些操作之后,我得到了三个文件:

Bridging-Header.h:

#import "opencvtest.h"

opencvtest.h:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#include <opencv2/core/core.hpp>
//#include <dlib/image_loader/load_image.h>
@interface CustomObject : NSObject
- (cv::Mat)cvMatFromUIImage:(UIImage *)image;

@end

opencvtest.mm:

#import "opencvtest.h"
错误:

/Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h:5:9: note: in file included from /Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h:5:
#import "opencvtest.h"
        ^ /Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/opencvtest.h:23:4: error: expected a type
- (cv::Mat)cvMatFromUIImage:(UIImage *)image;    ^ <unknown>:0: error: failed to import bridging header '/Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h'

另外,如果我在openvtest .h中添加#include <dlib/image_loader/load_image.h>行,那么我得到:

/usr/local/include/DLIB/string/string.h:7:10: error: 'sstream' file not found
#include <sstream>
         ^
<unknown>:0: error: failed to import bridging header '/Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h'

我要注意的是,所有这些错误只发生在我把这些包括语句在这个头中,当我在。mm文件中使用它时,所有工作正常。但是我需要它们在头文件中用于声明。

那么,我该如何修复它呢?

你的Objective-C对象的接口在Swift中可用,因此在桥接头中可见,不能引用任何c++类型。你需要写一个objective - c++包装器,这样c++类型只在.mm文件和.mm文件的头文件中被提及。您可以通过在objective - c++代码中使用扩展来隐藏使用c++的接口部分。请参考下面的问题和问题,以获得如何做到这一点的示例:

目标C opencv包装器swift项目没有看到STL头文件

相关内容

  • 没有找到相关文章

最新更新