如何使用预处理器有条件地声明新类的超类?

时间:2013-09-17 15:07:07

标签: ios objective-c c macos oop

我有一个框架,我需要部分重写,并采用AFNetworking。因此,版本2需要具有不同的超类(AFHTTPClient)。我正在尝试使用预处理程序标志并有条件地声明这一点。

这是我的代码:

#define TLC_FRAMEWORK_VERSION 2

#if TLC_FRAMEWORK_VERSION == 1
@interface TKSession : NSObject
#elif TLC_FRAMEWORK_VERSION == 2
@interface TKSession : AFHTTPClient
#endif
{
@private
    NSMutableArray  *_cachedShifts;
}

编译器(clang)给出了一个错误,基本上说明在预处理之后编译器没有正确读取声明。它认为它看到了这个:

#define TLC_FRAMEWORK_VERSION 2

{
@private
    NSMutableArray  *_cachedShifts;
}
...

我做错了什么/失踪了?

2 个答案:

答案 0 :(得分:0)

#define TLC_FRAMEWORK_VERSION 2

#if TLC_FRAMEWORK_VERSION == 1
@interface TKSession : NSObject
#else
@interface TKSession : AFHTTPClient
#endif
{
@private
     NSMutableArray  *_cachedShifts;
}

但更好地定义类似的东西:

#if TLC_FRAMEWORK_VERSION == 1
typedef NSObject TLCHTTPClient;
#else
typedef AFHTTPClient TLCHTTPClient;
#endif

@interface TKSession : TLCHTTPClient
{
@private
     NSMutableArray  *_cachedShifts;
}

更易于阅读

答案 1 :(得分:-2)

好的,我会回答我自己的问题。这是一个范围问题,我使用该标志导入的标头由于某种原因未被正确解析。我太忙了,无法解决编译器问题或异常,所以我在本地声明了这个标志。