2016-02-25 54 views
1

我有一個關於在Xcode中使用Objective-C++模塊中的C++頭文件的問題。具體來說,爲什麼我可以在源文件中包含它們,但不包含頭文件?Xcode和C++頭文件

這裏是一個具體的例子。

我使用Xcode 7.2.1並有兩個項目。第一個是我打包到「myFramework.framework」中的C++框架。它暴露了「myFramework.h」,它反過來引入「myLib.h」。在「myLib.h」的頂部是「#include <string>」。

第二個項目是一個Objective-C iOS應用程序,它使用上述框架。在這個項目中,「myViewController.mm」(Objective-C++源代碼)在頂部有「#import」myFramework/myFramework.h「,並引用該頭文件中定義的東西。

此時一切都很好和不錯的。它建立和沒有問題的運行。

當我移動「#進口myFramework/myFramework.h」行「myViewController.h」,編譯,因爲它不能找到「」頭依賴失敗。

如果將「myViewController.h」的文件類型從普通的「C Header」更改爲Objective-C++頭文件無關緊要,無論哪種方式,Xcode的頭文件搜索路徑都不尋找標準的C++頭文件

所以我的主要問題是爲什麼這樣表現?爲什麼僅僅因爲它在一個頭文件中而被處理#include /#import?

我的第二個問題是,如果有一些方法可以使Xcode處理#include /#在導入到頭文件而不是源文件時相同嗎?

非常感謝!

+0

你確定在編譯'.mm'文件時出現錯誤嗎?是不是'myViewController.h'導入到其他文件(然後該文件無法編譯)?順便說一下,不清楚你是否使用'#import「myFramework/myFramework.h」'或'#import ' – sergio

+0

是的,就是這樣。 「main.m」隱藏在「支持文件」下。我習慣了它與所有其他來源位於同一個文件夾中。也許這在Xcode的開發過程中發生了某些變化,我不知道。但無論如何 - 都很好,謝謝! – Bungles

+0

我已將我的評論移至答案,因此其他人更容易找到答案。 – sergio

回答

1

我懷疑將C++頭文件包含在其他頭文件中的問題是,Objective-C源文件可以看到C++頭文件,它會使其翻轉。

如果您混合使用了C++/Objective-C++/Objective-C,那麼您最好只向項目中的其他模塊公開純Objective-C接口,並將任何C++頭文件包含在Objective-C++源文件中只要。

或者做一切Objective-C++,然後你根本不需要擔心它。

希望這也回答你的第二個問題。

+0

App項目中的所有文件都是。mm(ObjC++)所以不知道什麼ObjC文件將#包括我的框架頭不知道我的知識?至於界面,我使用C++ 11字符串來處理所有事情,所以真的需要框架的使用者來使用它們。 – Bungles

+0

您必須發佈完整的編譯器錯誤消息才能弄清楚。 – trojanfoe

+0

你的加上塞爾吉奧的回答(見上文)導致我成爲罪魁禍首。目前正在做一個/ facepalm ... – Bungles

3

您確定在編譯myViewController.mm文件時遇到錯誤嗎?

檢查myViewController.h是否被導入到其他非ObjC++文件(並且那個文件無法編譯)。

+0

這似乎與我的回答沒有太大區別。它增加了什麼? – trojanfoe

+0

我最初是作爲評論寫的。由於OP在他們的回答中表示:「是的,就是這樣。」main.m「隱藏在」支持文件「下,我想這是一個答案。 – sergio