我在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
这是什么问题啊?要如何调用这三个数呢?类调用
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
这是什么问题啊?要如何调用这三个数呢?类调用
方式如下://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;//单独的外部变量,最好初始化一下。
方式如下://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文件里面在定义一次呢?
extern double x[];
extern double y[];
extern double _f; 这不是定义,是扩展变量的作用域,CPP那里才是定义.........一般定义全局变量都这样做,防止头文件重定义等错误
方式如下://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文件里面在定义一次呢?
那不是定义,那个是申明
方式如下://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
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;
}
//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;
}