错误: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之前有意义的事情”。
要除去循环依赖:
- 并在接口文件中添加一个前向类声明(
@class
)。 - 将
#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文件。
- Swift NavigationViewController
- iOS – 检测吹到麦克风和转换的结果! (迅速)
- 在iOS中存储和执行大量的操作
- 如何在iOS中以url的forms发布数据?
- 找不到CorePlot / Swift方法
- 如何在iOS App Store沙盒中testing自动续订订阅的“续订”组件?
- 实现UIKitDynamics拖动视图closures屏幕
- 在iOS中使用UIImage或CGImage API可以掩盖这种types
- pickerview上的随机崩溃didSelect:__ cffrloloop_is_calling_out_to_a_source1_perform1_function