2011-03-04 105 views
2

我目前正在開發iOS項目。爲了方便起見,我在早期的幾個小程序中分割了這些功能。該項目由Obj-C,Obj-C++和C++程序組成。現在我把所有的東西放到最終產品中,並且在Obj-C和C++之間的(我猜)兼容性方面遇到了一些奇怪的行爲。Obj-C錯誤:「期望類的指針前不合格id」

我想在obj-C++程序中初始化一個對象,該程序來自obj-C類。但是編譯OBJ-C類的頭文件時,我不斷收到錯誤:

#import <Foundation/Foundation.h> 
@class AVAssetExportSession; 

@interface LibraryImport : NSObject { 
AVAssetExportSession * export; //Error line 
NSError* movieFileErr; 
} 
//class methods 

的成績單是這樣的:

LibraryImport.h:24:錯誤: '出口'

之前預期不合格-ID

LibraryImport.h:24:error:instance variable'unnamed'has unknown size

LibraryImport.h:24:error:expected`;' 「出口」前

的調用是這樣的OBJ-C++文件:(檢測到的這裏沒有錯誤,只是覺得有什麼正相關)

LibraryImport* import = [[LibraryImport alloc] init]; 

最怪異的部分是,當它最初被稱爲由一個純粹的Obj-C程序,它工作得很好。但項目性質需要將調用者更改爲obj-C++。另外,當我試圖將obj-C文件更改爲obj-C++時,我得到的錯誤比以前更多,包括現有的錯誤。

這裏是讓我敲我的頭靠在牆上,在過去整整一個星期的問題:

  1. 在這種情況下,我怎麼能成功初始化此對象嗎?

  2. 這個問題與obj-C和C++之間的兼容性有關嗎?如果是這樣,是否有一個通用的解決方案或對兼容性的一些明確的解釋?

讓我知道是否需要更多信息(這是我第一次遇到這個問題,我甚至不知道從哪裏開始......)。任何見解將不勝感激。非常感謝你:-)

乾杯,

曼卡

回答

9

我不知道的OBJ-C++,只是C++。

某些編譯器將export視爲關鍵字,請嘗試以不同方式命名變量。

+3

事實上,'export'是一個C++關鍵字:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.14 – 2011-03-04 10:58:12

+1

並非總是如此。我沒有找到它,例如,在Visual Studio 2010 http://msdn.microsoft.com/en-us/library/2e6a4at9%28v=VS.100%29.aspx中,雖然IDE仍將它標記爲如果它是一個。我有點困惑。 – CygnusX1 2011-03-04 11:02:57

+1

您是否檢查@larsmans的鏈接?這是一個關鍵字,但沒有得到很好的支持。不確定VS是否真的是最好的地方來清除有關語言標準的混淆...... – walkytalky 2011-03-04 11:16:38