【发布时间】:2012-07-05 22:59:46
【问题描述】:
我在编译objective-c源码和objective-c++源码的时候有区别。
这里是 test.h 中 Class1 和 Class2 的声明:
#import <Foundation/Foundation.h>
@interface Class1 {
}
@end
@interface Class2 {
}
@end
现在,这是 test.m 中的 Objective-C 实现:
#import "test.h"
@implementation Class1
/* static member */
static int mystatic;
@end
@implementation Class2
/* static member */
static int mystatic;
@end
我用这个命令编译成功了:
gcc -arch armv6 -isysroot /Developer/.../iPhoneOS5.0.sdk -x objective-c -c test.m
现在我完全使用了这个 Objective-C++ 实现 test.mm(完全相同的来源):
#import "test.h"
@implementation Class1
/* static member */
static int mystatic;
@end
@implementation Class2
/* static member */
static int mystatic;
@end
并使用此命令行进行编译(-x 选项不同):
gcc -arch armv6 -isysroot /Developer/.../iPhoneOS5.0.sdk -x objective-c++ -c test.mm
但我得到一个错误:
test.mm:11 error: redefinition if 'int mystatic'
为什么我在 ObjC++ 中而不是在 ObjC 中得到这个错误?
【问题讨论】:
-
+1 好问题!错误是正确的(
static是文件作用域,而不是类作用域)但是为什么 Objective-C 编译没有捕获到我无法理解... -
好的,那么,有没有办法声明一个静态成员类作用域?
-
Objective-C 中没有,除了为每个变量使用不同的名称。
-
我不明白为什么有人会否决这个问题:我认为这是一个完全合法且非常有趣的问题,并以明确明确的方式陈述。
-
请注意,Objective-C 既没有“成员变量”、“静态成员”也没有“类变量”。虽然“成员变量”和“实例变量”几乎相同,但坚持使用语言的词汇是有帮助的。
标签: objective-c static compilation objective-c++ redefinition