错误:XXX之前的预期说明符限定符列表

时间:2011-09-15 09:29:39

标签: ios xcode4

它做了这么多次,我没有遇到任何问题,但这次我仍然得到上面的错误,我的相关代码是这样的:

#import "PiecesChoisies.h"

@interface SelectionMobilier : UIViewController {
IBOutlet PiecesChoisies *piecesChoisies;//Error: Expected specifier-qualifier-list before PiecesChoisies 
}
@end

提前填写任何建议:)

编辑: 我试试这个:

#import "PiecesChoisies.h"

    @interface SelectionMobilier : UIViewController {
    IBOutlet NSString *piecesChoisies;//Error: Expected specifier-qualifier-list before PiecesChoisies 
    }
    @end

现在我得到了这个堆栈:

enter image description here

3 个答案:

答案 0 :(得分:2)

PiecesChoisies未被识别为类型。这可能发生,因为它具有周期性依赖性。

以下代码示例说明了该问题。类A和B创建循环依赖项,尝试相互导入。

#import "B.h"               // <-- A imports B
@interface A : NSObject
@end

#import "A.h"
@implementation A
@end


#import "A.h"              // <-- and B imports A
@interface B : NSObject
@end

#import "B.h"
@implementation B
@end

因为永远不会创建类,所以编译器会将它们视为未知标记,因此错误显示为Expected specifier-qualifier-list before XXX。换句话说“我期待在XXX之前有意义的事情”。

删除循环依赖项:

  1. 并在接口文件中添加前向类声明(@class)。
  2. #import从界面移动到实施文件。
  3. 类声明告诉编译器“不要担心,我稍后会定义它”,因此标题可以安全导入,因为冲突的定义现在在实现文件中看不见了。

    以下示例的结果如下:

    @class B;             // <---- #import "B.h" replaced with @class B
    @interface A : NSObject
    @end
    
    #import "A.h"
    #import "B.h"         // <---- #import "B.h" added
    @implementation A
    @end
    

    对B级做同样的事情:

    @class A;             // <---- #import "A.h" replaced with @class A
    @interface B : NSObject
    @end
    
    #import "B.h"
    #import "A.h"         // <---- #import "A.h" added
    @implementation B
    @end
    

答案 1 :(得分:0)

问题将出现在PiecesChoisies.h中。变化:

 IBOutlet PiecesChoisies *piecesChoisies;

 IBOutlet NSString *piecesChoisies;

将确认问题位于.h文件中。

答案 2 :(得分:0)

如果这是在头文件中,请使用

@class PiecesChoisies;

而不是import语句。在.m文件中导入.h文件。