2011-07-19 125 views
0

请参考下面的代码:使用错误协议

// 
// CacheObjectManagerImpl.h 

#import <Foundation/Foundation.h> 
//#import "CacheObject.h" 

@class CacheObject; 

@protocol ICacheObjectManager <NSObject> 

typedef enum { 
    kSTRING, 
    kBYTEARRAY, 
    kCACHABLE, 
    kSTRINGVALUE 
} CacheObjType; 

CacheObjType *CacheObjectType; 

@required 
//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
- (CacheObject *) createCacheObject:(NSString *)data url:(BOOL*)isURL savefile:(BOOL*)saveToFile downloadmgr:(ICacheObjDownloadMgr*) downloadMgr; 
//-(CacheObject*) createCacheObject: (Cachable*) dataObject; 
@end 


@interface CacheObjectManagerImpl : NSObject { 

} 

@property(nonatomic,assign) id <ICacheObjectManager> delegate; 

@end 

它使用上面的类CacheObject下一个文件:

// 
// CacheManagerImpl.h 

#import <Foundation/Foundation.h> 
//#import "CacheObject.h" 
//#import "CacheObjectManagerImpl.h" 


@class CacheObject; 
@class CacheObjectManagerImpl; 


@protocol ICachePurgeLogic <NSObject> 

@required 

- (void)runPurge: (NSDictionary*)cacheMap; 

@end 


@protocol ICacheManager <NSObject> 

@required 
- (void) put:(NSString*)key cacheobj:(CacheObject*)cacheObj; 
- (CacheObject*)get: (NSString*)key; 
- (void) clearEntireCache; 
- (void) remove: (NSString*)key; 
- (void) purge; 
- (void) setCachePurgeCustomMgr: (ICachePurgeLogic*)cachePurgeLogic; **//ERROR: error: expected ')' before 'ICachePurgeLogic'** 

@end 

@interface CacheManagerImpl : NSObject { 

    NSNumber *timeToLive; 
    NSDictionary *cacheMap; 
    ICacheObjectManager *cacheObjMgr; **//ERROR: error: expected specifier-qualifier-list before 'ICacheObjectManager'** 

    ICachePurgeLogic *purgeManager; **//ERROR: error: expected specifier-qualifier-list before 'ICachePurgeLogic'** 

} 

@property(nonatomic,assign) id <ICacheManager> delegate; 

- (void) getCacheManagerInstance: (NSNumber*) timeToLive; 
- (ICacheObjectManager*) createCacheObjManager; **//ERROR: error: expected ')' before 'ICacheObjectManager'** 

- (ICacheObjectManager*) getCacheObjManager; **//ERROR: error: expected ')' before 'ICacheObjectManager'** 

@end 

我无法理解为什么我收到上述错误。如果我包含头文件,由于包含循环头文件,我会得到更多的错误。这些编译器错误有什么可能的解决方法?或者我的代码在协议传递和返回的意义上是完全错误的。

感谢,

+0

ICachePurgeLogic和ICacheObjectManager声明在哪里? – MCannon

回答

0

我会通过移动枚举声明,并开始什么似乎是伊娃是一个指针,你声明的类型你的协议。你不应该在协议声明中声明类型。此外,如果您想要实现您的协议的类具有某种类型的对象,请声明一个属性。协议只规定了应该或需要实施的方法。

+0

谢谢保罗的建议。 – XMarshall