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

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

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

提前感谢任何build议:)

编辑:我试试这个:

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

现在我得到了这个堆栈:

在这里输入图像说明

PiecesChoisies不被识别为一个types。 这可能会发生,因为它有周期性的依赖关系。

下面的代码示例说明了这个问题。 A和B类创build一个循环依赖项,试图导入对方。

 #import "Bh" // <-- A imports B @interface A : NSObject @end #import "Ah" @implementation A @end #import "Ah" // <-- and B imports A @interface B : NSObject @end #import "Bh" @implementation B @end 

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

要除去循环依赖:

  1. 并在接口文件中添加一个前向类声明( @class )。
  2. #import从接口移动到实现文件。

类声明告诉编译器“不用担心,我稍后再定义”,所以头文件可以安全地导入,因为冲突的定义现在在实现文件上是看不见的。

这是前例的结果:

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

和B类一样:

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

该问题将位于PiecesChoisies.h中。 更改:

  IBOutlet PiecesChoisies *piecesChoisies; 

  IBOutlet NSString *piecesChoisies; 

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

如果这是在一个头文件,使用

 @class PiecesChoisies; 

而不是导入声明。 在.m文件中导入.h文件。