我在relative.cpp里读入了x[3*NUM],y[3*NUM],_f,定义在relative.h中,现在我要在connect.cpp里用这三个参数,怎么总时报错呢?我的方法:在connect.cpp里引用relative.h,在connect.cpp内定义这三个参数 extern double x[3*NUM];
extern double y[3*NUM];
extern double _f;但是BUILD的时候会出错,错误如下
connect.obj : error LNK2001: unresolved external symbol "double _f" (?_f@@3NA)
connect.obj : error LNK2001: unresolved external symbol "double * y" (?y@@3PANA)
connect.obj : error LNK2001: unresolved external symbol "double * x" (?x@@3PANA)
Debug/danhangdai.exe : fatal error LNK1120: 3 unresolved externals
这是什么问题啊?要如何调用这三个数呢?调用

解决方案 »

  1.   

    把在relative.h中的定义放在relative.cpp中吧,要不connect.cpp中就两次定义了
      

  2.   

    ++
    方式如下://relative.h
    extern double x[];
    extern double y[]; 
    extern double _f; //relative.cpp
    double x[3*NUM]={0};//如果有可能,也初始化一下
    double y[3*NUM]={0};//如果有可能,也初始化一下
    double _f=0;//单独的外部变量,最好初始化一下。 
      

  3.   

    ++
    方式如下://relative.h
    extern double x[];
    extern double y[]; 
    extern double _f; //relative.cpp
    double x[3*NUM]={0};//如果有可能,也初始化一下
    double y[3*NUM]={0};//如果有可能,也初始化一下
    double _f=0;//单独的外部变量,最好初始化一下。 我想问一下,为什么在头文件里定义了还要在CPP文件里面在定义一次呢?
      

  4.   

    /relative.h
    extern double x[];
    extern double y[]; 
    extern double _f; 这不是定义,是扩展变量的作用域,CPP那里才是定义.........一般定义全局变量都这样做,防止头文件重定义等错误
      

  5.   

    ++
    方式如下://relative.h
    extern double x[];
    extern double y[]; 
    extern double _f; //relative.cpp
    double x[3*NUM]={0};//如果有可能,也初始化一下
    double y[3*NUM]={0};//如果有可能,也初始化一下
    double _f=0;//单独的外部变量,最好初始化一下。 我想问一下,为什么在头文件里定义了还要在CPP文件里面在定义一次呢?
    那不是定义,那个是申明
      

  6.   

    ++
    方式如下://relative.h
    extern double x[];
    extern double y[]; 
    extern double _f; //relative.cpp
    double x[3*NUM]={0};//如果有可能,也初始化一下
    double y[3*NUM]={0};//如果有可能,也初始化一下
    double _f=0;//单独的外部变量,最好初始化一下。 我想问一下,为什么在头文件里定义了还要在CPP文件里面在定义一次呢?
    那不是定义,那个是申明这么做还是有错啊,错误显示在头文件
    e:\danhangdai(模型链接)\relative.h(22) : error C2071: 'x' : illegal storage class
    e:\danhangdai(模型链接)\relative.h(22) : warning C4200: nonstandard extension used : zero-sized array in struct/union
    e:\danhangdai(模型链接)\relative.h(22) : error C2071: 'y' : illegal storage class
    e:\danhangdai(模型链接)\relative.h(22) : error C2229: class 'relative' has an illegal zero-sized array
    e:\danhangdai(模型链接)\relative.h(22) : warning C4200: nonstandard extension used : zero-sized array in struct/union
    e:\danhangdai(模型链接)\relative.h(22) : error C2071: '_f' : illegal storage class
    e:\danhangdai(模型链接)\relative.h(22) : error C2229: class 'relative' has an illegal zero-sized array
      

  7.   

    ++
    方式如下://relative.h
    extern double x[];
    extern double y[]; 
    extern double _f; //relative.cpp
    double x[3*NUM]={0};//如果有可能,也初始化一下
    double y[3*NUM]={0};//如果有可能,也初始化一下
    double _f=0;//单独的外部变量,最好初始化一下。 我想问一下,为什么在头文件里定义了还要在CPP文件里面在定义一次呢?
    那不是定义,那个是申明这么做还是有错啊,错误显示在头文件
    e:\danhangdai(模型链接)\relative.h(22) : error C2071: 'x' : illegal storage class
    e:\danhangdai(模型链接)\relative.h(22) : warning C4200: nonstandard extension used : zero-sized array in struct/union
    e:\danhangdai(模型链接)\relative.h(22) : error C2071: 'y' : illegal storage class
    e:\danhangdai(模型链接)\relative.h(22) : error C2229: class 'relative' has an illegal zero-sized array
    e:\danhangdai(模型链接)\relative.h(22) : warning C4200: nonstandard extension used : zero-sized array in struct/union
    e:\danhangdai(模型链接)\relative.h(22) : error C2071: '_f' : illegal storage class
    e:\danhangdai(模型链接)\relative.h(22) : error C2229: class 'relative' has an illegal zero-sized array
    这是外部变量的定义方式,你不是在结构体,共用体,类里也这样定义吧?
    结构体 //relative.h
    struct gloabals {
    double x[3*NUM]
    double y[3*NUM]
    double _f;
    };
    //relative.cpp 
    extern  gloabals g_gloabals={{0},{0},0 };
    void  usegloabals()
    {
      g_gloabals.x[0]=10;
      g_gloabals.y[0]=10;
      g_gloabals._f=100.123;
    }
      

  8.   

    上面有点错误,修改一下,这个是针对结构和类。
    //relative.h
    //结构体
    struct gloabals {
    double x[3*NUM];
    double y[3*NUM];
    double _f;
    };
    extern  gloabals g_gloabals;//全局结构变量声明,union,struct,class 都可以这么做
    //类,可以定义类的静态变量,其他类或者函数通过类名引用,类的所有对象,可以像普通成员,那样引用。
    class data{
    public :
    static double x[3*NUM];//类的静态变量,属于整个类,这样声明;union,struct,class 都可以这么做。
    static double y[3*NUM];//
    static double _f;      //};
    //relative.cpp 
    gloabals g_gloabals={{0},{0},0 };//全局结构变量定义,union,struct,class 都可以这么做
    double data::x[3*NUM]={0};//类的静态变量,这样定义;union,struct,class 都可以这么做。
    double data::y[3*NUM]={0};
    double data::_f[3*NUM]={0};
    void  usegloabals()
    {
      //结构体
      g_gloabals.x[0]=10;
      g_gloabals.y[0]=10;
      g_gloabals._f=100.123;
      //类
      data::x[0]=10;
      data::y[0]=10;
      data::_f=10;
      data d;
      d.x[1]=20;
      d.y[2]=30;
      d._f =45.6;
      data *p =&d;
     d._f=3.0;
     data &r =d;
     r._x=4.0;