0

Edit2: #import言語ではなく、@classを持つようにすべてのヘッダーを再構築しました。すべての.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;
}
4

1 に答える 1

0

問題は、循環インポートの依存関係でした。

どうやら、.hファイルの#importは、実際にはコンパイル順序に依存しているのに、必要なすべてのヘッダーがインポートされているとコンパイラーに思わせることで、問題を「カバー」することがあります。修正とベストプラクティスは、

@class MyClass

ヘッダーと

#import "MyClass.h"

.mで

于 2012-11-03T04:48:52.543 に答える