2015-03-31 38 views
0

當我嘗試調用我的C++實現文件中的函數(在標頭中用#ifdef __cplusplus extern「C」{}技巧標記爲C兼容)時,出現錯誤:在XCode中橋接C++和Swift,什麼是正確的生成設置?

「use of unresolved標識符'helloWorld()'「

我創建了橋接頭,只是在我的項目中添加了一個cpp和頭文件,並在它詢問我是否想創建橋頭時單擊」確定「。我在橋接頭文件中包含了「test.h」,其中包含函數聲明,但由於某些原因,Swift看不到該函數。

最奇怪的部分是,我創建了一個新的項目,並做了EXACT相同的過程,並調用helloWorld()工作正常,所以它是關於現有項目的東西我試圖添加cpp文件到那不是加工。

我假設這是一個構建設置問題,並且我一定把它們弄亂了,可能當我試圖導入一個靜態C/CPP庫時刪除了,但我爲它更改的一些構建設置可能會保留)。

那麼有沒有我應該知道的任何構建設置會解決這個問題?或者是否有辦法將我的構建設置完全重置爲默認設置(即使這意味着我必須重新創建橋接頭才能使橋接頭構建設置恢復到位)?

謝謝你的幫助!

詹姆斯

---編輯---

這裏是我的CPP頭:

Test.h

這裏是我的CPP實現文件:

Test.cpp

這是我的橋接報:

HawkEye-Bridging-Header.h

這裏是斯威夫特項目的相關部分:

viewDidLoad in viewController.swift

這裏是構建設置,設置橋接報:

Relevant build setting

+0

也許這:http://stackoverflow.com/questions/29327312/linker-error-when-trying-to-call-c-code-from-swift?否則請顯示test.h,test.cpp和Swift文件的相關部分。 – 2015-03-31 19:47:29

+0

感謝您的答覆馬丁,不幸的是我的問題不是鏈接器錯誤,而是一個編譯器錯誤。 Swift甚至沒有認識到我正在架設的功能。 --EDIT--「不幸的是,我的問題不是鏈接器錯誤」 - 我不能相信我這麼說。 – 2015-03-31 20:07:12

+0

我明白了,然後我不知道。 - 但一般來說,請複製/粘貼您的代碼,而不僅僅是截圖。如果有人試圖重現問題,這會變得更容易。 – 2015-03-31 20:14:14

回答

1

好 - 已解決。問題是需要從常規目標和測試目標中實現橋頭,因爲我正在進行單元測試,這是我現有項目中的目標。

我只是進入我的測試目標的生成設置,並添加了相應的Objective-C橋接頭,然後它一切正常。

希望它可以幫助別人!

0

我有同樣的經歷。確保添加單元測試目標,然後確保單元測試目標具有橋接頭文件的可見性。

我犯的另一個錯誤;確保每個Swift類,測試用例中使用的枚舉都具有正確的Target Membership。

enter image description here

相關問題