关于static成员的疑问

闭着眼刷牙 2014-05-03 09:59:27
class CRealTimePadSystemDlg : public CDialog
{
// Construction
public:
CRealTimePadSystemDlg(CWnd* pParent = NULL); // standard constructor

cHcpAction m_Action;
// int CheckImage(WORD* ModeBuf); //检测图片合格函数

void PerformOffsetCalibration();
void PerformGainCalibration();
int QueryProgress(bool showAll=false);

static long ImgDisplayThreadIsAlive; //线程标志位
static bool prevInit; //???
};

int CRealTimePadSystemDlg::QueryProgress(bool showAll)
{
//static struct UQueryProgInfo prevStatus; // So we can tell when GCrntStatus changes
if(!prevInit)
{
memset(&m_Action.prevStatus, 0, sizeof(SQueryProgInfo));
m_Action.prevStatus.qpi.NumFrames = -1;
prevInit = true;
}
......}
编译通过没问题,build时提示error LNK2001: unresolved external symbol "public: static bool CRealTimePadSystemDlg::prevInit" (?prevInit@CRealTimePadSystemDlg@@2_NA)
这个是什么问题啊
...全文
129 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
king1076 2014-05-05
  • 打赏
  • 举报
回复
静态成员变量 只能在静态函数中直接使用,要是在非静态函数中,只能用类名::静态变量 = true
worldy 2014-05-03
  • 打赏
  • 举报
回复
cpp文件中: long CRealTimePadSystemDlg::ImgDisplayThreadIsAlive=8;//在设计分配空间时可以初始其值
schlafenhamster 2014-05-03
  • 打赏
  • 举报
回复
bool CRealTimePadSystemDlg::prevInit=false;
闭着眼刷牙 2014-05-03
  • 打赏
  • 举报
回复
引用 1 楼 zzdmfk 的回复:
你还需要在类外面声明一下。bool CRealTimePadSystemDlg::prevInit;
在类的外边?我弄了error LNK2005: "public: static bool CRealTimePadSystemDlg::prevInit" (?prevInit@CRealTimePadSystemDlg@@2_NA) already defined in RealTimePadSystem.obj
路人乙2019 2014-05-03
  • 打赏
  • 举报
回复
你还需要在类外面声明一下。bool CRealTimePadSystemDlg::prevInit;
qc437700093 2014-05-03
  • 打赏
  • 举报
回复
静态成员不属于任何一个实例,而是属于这个类。类声明并未分配静态变量的内存空间
路人乙2019 2014-05-03
  • 打赏
  • 举报
回复
引用 8 楼 zzdmfk 的回复:
你引用的方式不对, if(!CRealTimePadSystemDlg::prevInit) { memset(&m_Action.prevStatus, 0, sizeof(SQueryProgInfo)); m_Action.prevStatus.qpi.NumFrames = -1; CRealTimePadSystemDlg::prevInit = true;
类的声明和实现都在一个文件中就不用在类外再声明。
路人乙2019 2014-05-03
  • 打赏
  • 举报
回复
你引用的方式不对, if(!CRealTimePadSystemDlg::prevInit) { memset(&m_Action.prevStatus, 0, sizeof(SQueryProgInfo)); m_Action.prevStatus.qpi.NumFrames = -1; CRealTimePadSystemDlg::prevInit = true;
sichuanwww 2014-05-03
  • 打赏
  • 举报
回复
cpp文件中: long CRealTimePadSystemDlg::ImgDisplayThreadIsAlive=8;//在设计分配空间时可以初始其值
baichi4141 2014-05-03
  • 打赏
  • 举报
回复
静态变量必须在类定义外定义 理所当然的,必须在CPP文件中定义
encoderlee 2014-05-03
  • 打赏
  • 举报
回复
你的两个static成员变量只有声明没有定义 定义方法如3、4楼

15,980

社区成员

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

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