2012-07-21 125 views
2

我.h文件中:未知類型名稱

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
#import "GameData.h" 
#import "PROBattleScene.h" 

@interface PROBattleAI : NSObject { 
    BattleType type; 
    PROBattleScene *scene; 
} 

-(id)initWithType:(BattleType)_type andBattleInformation:(NSMutableDictionary*)_information andScene:(PROBattleScene*)_scene; 
-(void)dealloc; 
@end 

但上線PROBattleScene *scene;我在Xcode獲得未知的類型名稱錯誤。

我試過這裏的答案:xcode unknown type name但我已經這樣做(並且不起作用)。

這是爲什麼發生?我已經導入我的PROBattleScene.h文件,爲什麼不被識別?

編輯:和PROBattleScene.h的要求內容:

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
#import "GameData.h" 
#import "SimpleAudioEngine.h" 

#import "PROBattleBackground.h" 
#import "PROBattleAI.h" 

@interface PROBattleScene : CCLayer { 
    NSMutableDictionary *battleInformation; 
    NSMutableArray *localPlayerPartyData; 

    PROBattleBackground *background; 

    CCNode *base; 

    PROBattleAI *enemyAI; 
} 
+(CCScene*)scene; 
-(id)init; 
-(void)loadBattleInformation; 
-(void)loadBGM; 
-(void)loadBackground; 
-(void)loadBase; 
-(void)loadEnemyAI; 
-(void)beginBattle; 

@end 
+1

請向我們展示'PROBattleScene.h'的內容。 – mattjgalloway 2012-07-21 17:27:39

+0

你的'PROBattleScene.h'文件裏有什麼* – 2012-07-21 17:28:04

+1

並且您正在文件「PROBattleScene.h」中定義一個名爲'PROBattleScene'的類型(正好是拼寫/大寫/小寫)? – Sven 2012-07-21 17:28:13

回答

7

你有一個循環依賴。 PROBattleAI進口PROBattleScene其中進口PROBattleAI其儘可能多的進口PROBattleScene < ZOMG無限循環>

使用@class PROBattleWhatever在你的頭成爲可能。只爲協議定義或超類導入標題。

編輯好吧,上面的措辭是完全不好的...和誤導。這是(我相信)發生的細節。您的PROBattleAI導入PROBattleScene,然後導入PROBattleAI,然後PROBattleAI再次導入PROBattleScene(全部到達任一文件中的任何代碼之前)。此次導入將忽略PROBattleScene,因爲它已被導入,並且由於文件被跳過,您將收到未定義的類型錯誤。

+0

'#import'阻止這個循環,它是'#include',它創建了這個無限的包含循環。檢查了這一點:http://stackoverflow.com/questions/439662/what-is-the-difference-between-import-and-include-in-objective-c – samfisher 2012-07-21 17:49:29

+0

@samfisher#進口阻止它被多次導入(如C++ #ifndef邏輯),但對於#import彼此的文件不能很好地工作。 – borrrden 2012-07-21 17:51:00

+0

啊,我明白了。沒有看到即將到來。 – Voldemort 2012-07-21 17:52:06