主程序中没有引用类,在程序运行时却显示错误出现在类文件中?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

主程序中没有引用类,在程序运行时却显示错误出现在类文件中?报错

爱吃鱼的程序员 2020-06-14 14:39:40 12

这是我在学习OC的时候遇到的一个疑问

创建类Foo,这是练习全局变量和外部变量时候用的,文件中涉及外部变量 globalvar

#import <Foundation/Foundation.h>

@interface Foo : NSObject

-(void) setGlobalVar: (int) val;

@end




#import "Foo.h"

@implementation Foo

-(void) setGlobalVar:(int)val
{
    extern int globalvar;
    globalvar=val;
}

@end

然后是主程序,这是我接下来的程序,其中并没有加入头文件“Foo.h”

#import <Foundation/Foundation.h>
#import "Fraction.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,那么他因该与我的主程序没有关联。为什么会引起报错?

希望大家给新手我指点下错误,谢谢!



C++
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-14 14:39:58

    extern是拿来宣告外部变数的,

    你没有给它的一个全域变数

    如果你的代码在加一行就不会报错了

    #import"Foo.h"//宣告全域变数intglobalvar;@implementationFoo-(void)setGlobalVar:(int)val{externintglobalvar;globalvar=val;}@end




    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程