簡短版本:我有一個Qt/C++,我不得不添加有限數量的Cocoa/Objective-C代碼。我已將.cpp文件更改爲.mm文件,並將該Objective-C代碼/對象添加到所述文件,然後編譯並運行。我現在需要爲我創建的其中一個對象創建一個委託 - 一個NSPopUpButton(或者更準確地說是它的菜單) - 而且我被卡住了。我怎樣才能爲這個對象添加一個委託?如何處理來自C++的objective-c委託?
詳情: 文件中的問題:
reportwindow.h,reportwindow.cpp更名爲reportwindow.mm - 這些是包含我原來的C++實現,加上文件的一些Objective-C代碼(打開包含一個NSSavePanel NSPopUpButton)。 reportwindow.h還包含在.cpp文件中,如果這有所幫助。
menuHandler.h,menuHandler.mm - 這些文件包含(目前爲空)Objective-C類,我是打算作爲一個代表
我首先想到的是,我可以簡單地使C到使用++類代表,但這顯然不起作用,直C++不理解委託。然後,我想我會做一個單獨的Objective-c類作爲NSMenuDelegate,並將它的一個實例作爲成員對象添加到我的C++類中。由於我已經能夠添加其他Objective-C對象作爲成員,我認爲這應該起作用。但是,一旦我在C++類頭文件中包含了我的新Objective-C類的頭文件,我就收到了幾百個有關「在'@'標記之前期待的非限定標識」 - 從蘋果頭文件(NSValue.h ,NSObject.h等)顯然,這沒有奏效,至少不是。在我的類頭文件中包含ANY cocoa頭時,會得到相同的結果。
然後我想我會嘗試一個Objective-c類的前向聲明(這就是我如何獲得其他objective-c對象的工作方式)。然而,這也不起作用 - 如果我將其聲明爲「class myClassName」,則會出現有關將該類重新定義爲不同類型的符號(推測爲C++類vs objective-c協議)的錯誤。如果我嘗試將其聲明爲@protocol myClassName,則會出現有關「@'token'之前的預期非限定標識」的錯誤。那我該如何做這項工作?
已重命名該特定CPP文件毫米設置你的頭,使他們能夠使用的一些有用的信息? –
與問題標題關聯的那個,是的。 – ibrewster
第二種方式是走的路,也許是唯一的一條路。在第一次失敗後,你不應該投降。提供更多的細節,包括什麼,可能會有更多.cpp文件包含'reportwindow.h'。 – hamstergene