开发者社区> 问答> 正文

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

这是我在学习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,那么他因该与我的主程序没有关联。为什么会引起报错?

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



展开
收起
爱吃鱼的程序员 2020-06-14 14:39:40 730 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

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

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

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




    2020-06-14 14:39:58
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载