如何在一个类的成员函数内给另一个类的静态成员变量赋值

yiiiitian 2009-01-05 11:25:23
我定义了一个类SPostMsgToMain用于向一个用户界面线程(比如线程A)发送消息,SPostMsgToMain含有一个静态方法用于发送消息,一个静态成员用于存储消息的指针,类的代码如下:

//头文件代码
#pragma once
#include "afxwin.h"

class SPostMsgToMain
{
public:
SPostMsgToMain(void);
public:
~SPostMsgToMain(void);
public:
//发送消息方法
static void PostMsg(int msgNum, PVOID pPara);
//存储消息线程的指针
static CWinThread* m_pThread;
};


//实现代码
#include "StdAfx.h"
#include "SPostMsgToMain.h"

SPostMsgToMain::SPostMsgToMain(void)
{
}

SPostMsgToMain::~SPostMsgToMain(void)
{
}

void SPostMsgToMain::PostMsg(int msgNum, PVOID pPara)
{
//这里的实现代码省略了
}

我查了一些资料,里面对静态变量的赋值都是在类的外面定义的,比如
CWinThread* SPostMsgToMain::m_pThread=pThread;

我想在用户界面线程的构造函数里面给SPostMsgToMain::m_pThread赋值,不知能否实现,如果能应该怎么实现?
请高手指点
...全文
709 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ancillar 2011-08-16
  • 打赏
  • 举报
回复
error LNK2001: 无法解析的外部符号 "public: static class CWinThread * SPostMsgToMain::m_pThread" (?m_pThread@SPostMsgToMain@@2PAVCWinThread@@A)
fatal error LNK1120: 1 个无法解析的外部命令。
笨得要死,这个错误就是没找到变量或函数的定义嘛,添加头文件就可以了。
yiiiitian 2009-01-05
  • 打赏
  • 举报
回复
呵呵,谢谢大家关注。吃饭去了,回来再回复大家
yiiiitian 2009-01-05
  • 打赏
  • 举报
回复
QueryThread::QueryThread(void)
{
SPostMsgToMain::m_pThread=this;
}
我用如上方法赋值报错:
error LNK2001: 无法解析的外部符号 "public: static class CWinThread * SPostMsgToMain::m_pThread" (?m_pThread@SPostMsgToMain@@2PAVCWinThread@@A)
fatal error LNK1120: 1 个无法解析的外部命令
xuruichen 2009-01-05
  • 打赏
  • 举报
回复
不懂啊,顶楼主。学习下。
hai040 2009-01-05
  • 打赏
  • 举报
回复
定义是必需的
CWinThread* SPostMsgToMain::m_pThread=pThread;
yiiiitian 2009-01-05
  • 打赏
  • 举报
回复
你们说的方法也报同样的错误
yiiiitian 2009-01-05
  • 打赏
  • 举报
回复
QueryThread为用户界面线程
QueryThread::QueryThread(void)
{
SPostMsgToMain postMsgToMain;
postMsgToMain.m_pThread=this;
}

我用如上方法赋值报错:
error LNK2001: 无法解析的外部符号 "public: static class CWinThread * SPostMsgToMain::m_pThread" (?m_pThread@SPostMsgToMain@@2PAVCWinThread@@A)

fatal error LNK1120: 1 个无法解析的外部命令
OenAuth.Core 2009-01-05
  • 打赏
  • 举报
回复
直接SPostMsgToMain::m_pThread=pThread=你想赋的值就行了。
类的静态变量从本质上来说就是一个狡辩的变量 
hai040 2009-01-05
  • 打赏
  • 举报
回复
直接SPostMsgToMain::m_pThread=thread

CWinThread* SPostMsgToMain::m_pThread=pThread;
这个是定义,不是附值
yiiiitian 2009-01-05
  • 打赏
  • 举报
回复
谢谢大家,我有测试了一下。正确的代码是:
//头文件代码
#pragma once
#include "afxwin.h"

class SPostMsgToMain
{
public:
SPostMsgToMain(void);
public:
~SPostMsgToMain(void);
public:
//发送消息方法
static void PostMsg(int msgNum, PVOID pPara);
//存储消息线程的指针
static CWinThread* m_pThread;
};


//实现代码
#include "StdAfx.h"
#include "SPostMsgToMain.h"

SPostMsgToMain::SPostMsgToMain(void)
{
}

SPostMsgToMain::~SPostMsgToMain(void)
{
}

void SPostMsgToMain::PostMsg(int msgNum, PVOID pPara)
{
//这里的实现代码省略了
}
SPostMsgToMain::m_pThread=NULL; //此处为静态成员的定义。该定义要写在实现文件里面,不能写在头文件里面

使用时包含头文件后,使用解析运算符就可以了。如:
#include "StdAfx.h"
#include "SPostMsgToMain.h"


QueryThread::QueryThread(void)
{
SPostMsgToMain::m_pThread=this;
}

感觉一楼说的比较好,我给分去了。
再次谢谢大家的热心帮助,谢谢大家

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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