首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

结构函数中赋值成功,但是消息函数中使用不正确

2013-12-10 
构造函数中赋值成功,但是消息函数中使用不正确在构造函数中赋值成功 恩,就应该是局部变量的问题,你可以在

构造函数中赋值成功,但是消息函数中使用不正确
在构造函数中赋值成功


 恩,就应该是局部变量的问题,你可以在第一个函数中,把这个指针返回,然后接收这个指针,作为第二个函数的实参~~
[解决办法]
引用:
clientinfomsg1 这申请的内存地址,你在消息函数中有没有把它的地址传递进去呢?

好像没有,这里应该怎么传递进去呢

BEGIN_MESSAGE_MAP(TalkDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(ID_CLOSE, OnClose)
ON_BN_CLICKED(ID_SEND, OnSend)
//ON_MESSAGE(RE_RECEIVED,OnReceive)

END_MESSAGE_MAP()


最好把EXCHANGER_SEND_MESSAGE对象换成TalkDlg类的成员变量,然后在TalkDlg构造函数里面
new它的对象赋值操作后 通过TalkDlg指针来调用EXCHANGER_SEND_MESSAGE对象
[解决办法]
void TalkDlg::OnSend() 
{
    clientinfomsg1->Type=12;
    memcpy(clientinfomsg1->Data,m_send_info,m_send_info.GetLength());
}


OnSend被调用的时候,压根就不知道clientinfomsg1这个玩意儿指向哪儿。然后及居然使用它的成员,当然是错误的指针了。
[解决办法]
引用:
在构造函数中赋值成功

class {
....
EXCHANGER_SEND_MESSAGE * clientinfomsg1;//定义为成员变量。
....
};

TalkDlg::TalkDlg(CWnd* pParent,EXCHANGER_SEND_MESSAGE *c)
: CDialogEx(TalkDlg::IDD, pParent)
{
//clientinfomsg1 =c; 可能只需要这样就成了。
        //也可能需要 像你这样。
        clientinfomsg1 = new EXCHANGER_SEND_MESSAGE; //别忘了在析构函数里,释放它。


strncpy(clientinfomsg1->UserName,c->UserName,64);
strncpy(clientinfomsg1->TargetUserName,c->TargetUserName,64);
clientinfomsg1->ClientType=1;
clientinfomsg1->ClientStatue=1;
strncpy(clientinfomsg1->ConnectUser,c->ConnectUser,64);
}


单步调试中可以看到成功赋值。
但是在后面的消息函数中使用又没有值了

void TalkDlg::OnSend() 
{
clientinfomsg1->Type=12;
memcpy(clientinfomsg1->Data,m_send_info,m_send_info.GetLength());
}

错误的值,错误的指针。。。。


clientinfomsg1 没有定义,就使用了所以错误

TalkDlg::TalkDlg(CWnd* pParent,EXCHANGER_SEND_MESSAGE *c)
中定义的clientinfomsg1,
是函数定义的局部变量。

在函数外面(另一个函数中),当然就不可用了!

[解决办法]
clientinfomsg1 应该是成员变量,而不是构造函数里的一个局部变量。

热点排行