2016-08-24 36 views
0

我想在Objective-C++代碼中使用OpenCV,我將從Swift中調用它。首先,我使用this answer來連接Objective-C和Swift。所以這些操作後,我得到三個文件:不同的C++語句在Objective-C頭文件中拋出錯誤

橋接-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' 

另外,如果我在opencvtest.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文件中工作正常。但我需要他們在標題中進行聲明。

那麼,我該如何解決它?

回答

1

在Swift中可用的Objective-C對象的接口,因此在橋接頭中可見,不能引用任何C++類型。您需要編寫一個Objective-C++包裝器,以便只在您的.mm文件和.mm文件中使用的標題中提及C++類型。通過在Objective-C++代碼中使用擴展名,可以隱藏使用C++的接口部分。請參閱以下問題和問題的如何做到這一點的例子引用有:

objective C opencv wrapper for swift project does not see STL headers

+0

嗯...我沒有想到這一點。絕對清楚,謝謝! :) –