在一个类中定义的函数调用了另一个类中定义的静态变量,出现链接错误

cmjauto 2011-10-13 08:54:09
大家好!
我在一个类中定义的函数调用了另一个类中定义的静态变量,出现链接错误:
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函数中使用了静态变量是不是出错了?
恳请大家指点一番,谢谢……

...全文
398 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztj2005 2011-10-13
  • 打赏
  • 举报
回复
接着,我定义了子对话框类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楼的做。

cmjauto 2011-10-13
  • 打赏
  • 举报
回复
谢谢您,我声明过了,现在问题解决了……
[Quote=引用 3 楼 chinatcp 的回复:]
估计是 静态变量初始化的问题,
把静态变量初始化代码贴出来看看。

静态成员初始化与一般数据成员初始化不同:
初始化在类体外进行,而前面不加static,
[/Quote]
cmjauto 2011-10-13
  • 打赏
  • 举报
回复
确实是应该在函数名之前加类名的,谢谢您,问题解决了……
[Quote=引用 1 楼 gameslq 的回复:]
静态变量使用没错
好像是你在类CBeginPrecast 中声明了 函数Precast
但没定义,应该这样



C/C++ code

double CBeginPrecast::Precast(double x1,double x2,double x3,double x4) //该函数要使用主类中的静态变量
{
double v[4][3]; //
double w[……
[/Quote]
罗平 2011-10-13
  • 打赏
  • 举报
回复
估计是 静态变量初始化的问题,
把静态变量初始化代码贴出来看看。

静态成员初始化与一般数据成员初始化不同:
初始化在类体外进行,而前面不加static,
zgl7903 2011-10-13
  • 打赏
  • 举报
回复
//.h
class Cmy_ann02Dlg : public CDialog
{
static double gama_final;

//.cpp
double Cmy_ann02Dlg::gama_final=0;

gameslq 2011-10-13
  • 打赏
  • 举报
回复
静态变量使用没错
好像是你在类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;
…………………………………………
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧