我正在测试一些代码,我在头文件中声明了一个全局变量,但我收到一个链接器错误:“重复符号”
头文件:
//
// GlobalVaraibleClass.h
// GlobalVar
//
#import <Foundation/Foundation.h>
int gGlobalVar = 0;
@interface GlobalVaraibleClass : NSObject
@end
类文件:
//
// GlobalVaraibleClass.m
// GlobalVar
//
#import "GlobalVaraibleClass.h"
@implementation GlobalVaraibleClass
@end
主:
//
// main.m
// GlobalVar
//
#import <Foundation/Foundation.h>
#import "GlobalVaraibleClass.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
extern int gGlobalVar;
NSLog(@"Hello, World! %i", gGlobalVar);
}
return 0;
}
我哪里错了?
答案 0 :(得分:4)
这是向后的,extern进入标题,声明设置值在实现文件中。
extern
指定变量将在其他地方声明。如果声明在每次包含标题时都在标题中,则会有另一个声明,并且在链接时会有多个定义不会链接。
示例:
// GlobalVaraibleClass.h
extern int gGlobalVar;
// GlobalVaraible.m
#import "GlobalVaraibleClass.h"
int gGlobalVar = 3;
// main.m
#import <Foundation/Foundation.h>
#import "GlobalVaraibleClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Hello, World! %i", gGlobalVar);
}
return 0;
}