2011-05-25 90 views
1

我正在編寫一個iPhone應用程序,我正在使用OpenCV進行一些圖像處理。到目前爲止,我只用它在純C中,但現在我需要使用C++來創建一些基本的OCR。混合Objective-C和C++和OpenCV

我首先創建了一個.h/.cpp文件,它似乎很好地編譯。但我需要將它與一些Objective-C混合來打開圖像等等。然後,我將該文件重命名爲.mm而不是.cpp,但它不會編譯!

我得到這個錯誤: 「語句表達式只允許內部函數」中的OpenCV core.hpp線432 432

行是這一行:

typedef Matx<_Tp, MIN(m, n), 1> diag_type; 

任何想法,爲什麼這件事會發生?

回答

1

我竟然依靠這個傢伙提供的專用框架(和示例項目):http://aptogo.co.uk/2011/09/opencv-framework-for-ios/

我設法利用他的樣品中也做了同樣的方法用於我的Objective-C mac應用程序。也就是說,在.PCH文件中使用import指令以及使用.mm作爲依賴任何OpenCV C++代碼/類的Objective-C文件。

0

至少在xcode 4.5中,值得一提的另一個(無關的?)事情是,您必須在您的目標設置中將您的C++標準庫更改爲'libstdC++'才能使openCV編譯。

0

因爲OpenCV定義了一個MIN宏,它與Apple框架定義的MIN函數衝突,所以必須在UIKit.h和Foundation.h之前包含OpenCV頭文件。如果在UIKit.h和Foundation.h之後包含OpenCV頭文件,將會收到編譯錯誤,如'LLVM GCC 4.2錯誤:語句表達式只允許在函數內部'。首先包含OpenCV頭文件並使用__cplusplus條件測試圍繞#import可以避免這個問題,並且意味着您仍然可以在您的項目中使用普通的Objective-C作爲不調用OpenCV API的.m文件。

http://aptogo.co.uk/2011/09/opencv-framework-for-ios/