编译器和/或Xcode错误未知类型和预期标识符。导入循环?

时间:2012-11-03 00:47:55

标签: objective-c xcode compiler-construction types import

Edit2:我重新构建了所有标头,以获得@class而不是#import语言。所有.m文件现在都有#import。这里发布的问题似乎是固定的。现在有一些BAD ACCESS错误,但它可能是完全相同的根问题,这个表现形式已经解决

编辑:我刚刚发现了一个叫做“导入循环”的东西。我正在研究这个问题。如果有任何人对此有任何信息,请告诉我。

无关的更改导致不可能的错误 - 我认为程序中的某些地方存在更深层次或某些错误,但我只是想确认是这种情况。我有3个错误,并且已经在不同的Xcode项目中重建程序。我有一些代码示例,但不要担心 - 它们(主要是)头文件

错误1

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "PixelSprite.h"
#import "HUDLayer.h"
#import "PixelCharacter.h"

/*typedef enum
{
    GameSceneLayerTagGame = 1,
    GameSceneLayerTagHUD
}GameSceneLayerTags;*/

@interface GameLayer : CCLayer {

}
@property (assign,readwrite) CGPoint heroStartPoint;
@property (nonatomic, retain) CCTMXTiledMap *tileMap;
@property (nonatomic, retain) CCTMXLayer *background;
@property (assign, readwrite) NSInteger scrollSpeed;
@property (assign, readwrite) PixelCharacter *heroCharacter;

以上行包含编译器错误:未知类型名称'PixelCharacter'。我知道没有拼写错误。我甚至为了确保

而复制粘贴类和头文件的名称
+(GameLayer *) sharedGameLayer;

-(id) init;

@end

错误2

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "HUDButton.h"

@interface HUDLayer : CCLayer {

}

@property (readwrite,assign) CCArray* buttonsArray;

// Working with the buttons
-(void) addHUDButtonOfType:(NSString*)type inSlot:(int)slot;
-(void) addHUDButtonOfType:(NSString*)type;
-(void) removeHUDButton:(HUDButton*)button;

以上行包含编译器错误:预期类型 这是没有意义的,因为明确发布了一种类型

-(void) removeHUDButtonOfType:(NSString*)type;
-(void) removeAllButtons;

-(void) buttonsQuery;



@end

错误3

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    // Get touch location
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    // Verify that touch is on button
    BOOL isTouchHandled = CGRectContainsPoint([buttonSprite boundingBox], location);
    if (isTouchHandled) {
        [buttonSprite setColor:ccRED];
        SEL selector = NSSelectorFromString(actionMessage);
        GameLayer* layer = [GameLayer sharedGameLayer];
        PixelCharacter* heroCharacter = [layer heroCharacter];

上面一行包含一个编译器警告:不兼容的指针类型初始化'PixelCharacter *'和表达式'int *'

        [heroCharacter addToDoQueue:selector];

    }

    return isTouchHandled;
}

1 个答案:

答案 0 :(得分:0)

问题是循环导入依赖性。

显然,.h文件中的#import有时可以通过使编译器认为在真正依赖于编译顺序时导入所有必需的头文件来“掩盖”问题。修复和最佳实践是使用

@class MyClass
标题中的

#import "MyClass.h"
<。> <。>