2011-03-04 104 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