大家好!
    我在一个类中定义的函数调用了另一个类中定义的静态变量,出现链接错误:
error LNK2019: unresolved external symbol "public: double __thiscall CBeginPrecast::Precast(double,double,double,double)" (?Precast@CBeginPrecast@@QAENNNNN@Z) referenced in function "public: void __thiscall CBeginPrecast::OnBnClickedOK(void)" (?OnBnClickedOK@CBeginPrecast@@QAEXXZ) BeginPrecast.obj 程序描述如下:
    首先,我定义了主对话框类class Cmy_ann02Dlg : public CDialog  ,在其中定义了静态变量:
static double v_final[4][3],w_final[3],zita_final[3],gama_final; 之后又在其Cmy_ann02Dlg.cpp中
对他们初始化了。程序运行时,会把处理结果赋给这些静态变量,这些静态变量要给子对话框类中的函数调用的。    接着,我定义了子对话框类class CBeginPrecast : public CDialog ,在其中定义了一个函数:
double Precast(double x1,double x2,double x3,double x4)  //该函数要使用主类中的静态变量
{
double v[4][3]; //
double w[3]; //
double zita[3]; //
double gama; //
double U,I[3],O[3],y_real; //提取此时的权值、阈值
int m=0;
for (m=0;m<3;m++)
{
v[0][m]=Cmy_ann02Dlg::v_final[0][m];
v[1][m]=Cmy_ann02Dlg::v_final[1][m];
v[2][m]=Cmy_ann02Dlg::v_final[2][m];
v[3][m]=Cmy_ann02Dlg::v_final[3][m];
w[m]=Cmy_ann02Dlg::w_final[m];
zita[m]=Cmy_ann02Dlg::zita_final[m];
}
gama=Cmy_ann02Dlg::gama_final;
         …………………………………………
}   最后,在子对话框类中的void CBeginPrecast::OnBnClickedOK()函数中调用了Precast函数以获取结果。   请问:我这里的Precast函数中使用了静态变量是不是出错了?  
   恳请大家指点一番,谢谢……

解决方案 »

  1.   

    静态变量使用没错
    好像是你在类CBeginPrecast 中声明了 函数Precast 
    但没定义,应该这样 
    double CBeginPrecast::Precast(double x1,double x2,double x3,double x4) //该函数要使用主类中的静态变量
    {
    double v[4][3]; //
    double w[3]; //
    double zita[3]; //
    double gama; //
    double U,I[3],O[3],y_real;//提取此时的权值、阈值
    int m=0;
    for (m=0;m<3;m++)
    {
    v[0][m]=Cmy_ann02Dlg::v_final[0][m];
    v[1][m]=Cmy_ann02Dlg::v_final[1][m];
    v[2][m]=Cmy_ann02Dlg::v_final[2][m];
    v[3][m]=Cmy_ann02Dlg::v_final[3][m];
    w[m]=Cmy_ann02Dlg::w_final[m];
    zita[m]=Cmy_ann02Dlg::zita_final[m];
    }
    gama=Cmy_ann02Dlg::gama_final;
      …………………………………………
    }
      

  2.   

    //.h
    class Cmy_ann02Dlg : public CDialog 
    {
     static double gama_final; //.cpp
    double Cmy_ann02Dlg::gama_final=0; 
      

  3.   

    估计是 静态变量初始化的问题,
    把静态变量初始化代码贴出来看看。静态成员初始化与一般数据成员初始化不同: 
     初始化在类体外进行,而前面不加static,
      

  4.   

    接着,我定义了子对话框类class CBeginPrecast : public CDialog ,在其中定义了一个函数:
    double Precast(double x1,double x2,double x3,double x4) //该函数要使用主类中的静态变量
    在h文件中要声明:
    class CBeginPrecast {
       double Precast(double x1,double x2,double x3,double x4); 
    }在cpp文件用要按1楼的做。