这是我在学习OC的时候遇到的一个疑问
创建类Foo,这是练习全局变量和外部变量时候用的,文件中涉及外部变量 globalvar
@interface Foo : NSObject
-(void) setGlobalVar: (int) val;
@end
@implementation Foo
-(void) setGlobalVar:(int)val
{
extern int globalvar;
globalvar=val;
}
@end
然后是主程序,这是我接下来的程序,其中并没有加入头文件“Foo.h”
int main(int argc, const char * argv[])
{
@autoreleasepool {
Fraction *fractionA,*fractionB,*fractionC;
NSLog(@"%i",[Fraction countF]);
fractionA=[[Fraction allocF] init];
fractionB=[[Fraction allocF] init];
fractionC=[[Fraction allocF] init];
NSLog(@"%i",[Fraction countF]);
}
return 0;
}
但是运行时却提示了错误,
Undefined symbols for architecture x86_64:
"_globalvar", referenced from:
-[Foo setGlobalVar:] in Foo.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
删掉类Foo或者去除语句
extern int globalvar;
globalvar=val;
后,程序不报错。
我的疑问是,为什么我主程序中没有引用类Foo,报错会出现在Foo的外部变量上呢?
我的理解应该是:既然我没有调用类Foo,那么他因该与我的主程序没有关联。为什么会引起报错?
希望大家给新手我指点下错误,谢谢!
extern是拿来宣告外部变数的,
你没有给它的一个全域变数
如果你的代码在加一行就不会报错了
//宣告全域变数
int globalvar;
@implementation Foo
-(void) setGlobalVar:(int)val
{
extern int globalvar;
globalvar=val;
}
@end
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。