“非静态成员引用必须与特定对象相对” 请大家帮忙看一下

hyn85831762 2014-12-24 10:38:12
开了个线程 然后调用一个类内部变量 public: int nMachine; 提示ERROR“非静态成员引用必须与特定对象相对”
UINT CControlDebugDlg::myusbThread(LPVOID lpParamenter)
{
//CControlDebugDlg CDialogEx;
//CDialogEx.nMachine=1 ;

nMachine=X;
}
...全文
490 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lis2012 2014-12-25
  • 打赏
  • 举报
回复
引用 8 楼 lx624909677 的回复:
[quote=引用 7 楼 lis2012 的回复:] 类成员变量
既然是类的成员变量,为什么还要传递自己的对象进来[/quote] 你最好去看一下 多线程函数方面的讲解
lx624909677 2014-12-25
  • 打赏
  • 举报
回复
引用 7 楼 lis2012 的回复:
类成员变量
既然是类的成员变量,为什么还要传递自己的对象进来
lis2012 2014-12-25
  • 打赏
  • 举报
回复
引用 6 楼 lx624909677 的回复:
[quote=引用 5 楼 lis2012 的回复:] [quote=引用 4 楼 lx624909677 的回复:] [quote=引用 3 楼 lis2012 的回复:] 最好通过LPVOID lpParamenter参数将CDialogEx对象传递到多线程中,这样就可以直接访问了
传递的是类对象,想要调用类里面的方法,还是需要通过对象来调用,直接写变量名,那不成了全局变量了吗[/quote] 你的多线程不是在CControlDebugDlg实例里面运行的吗,这样的话CControlDebugDlg对象一定是早于线程产生,晚于其释放,为什么要是全局变呢?[/quote] nMachine这个是另外一个类里的吧[/quote] 类成员变量
lx624909677 2014-12-25
  • 打赏
  • 举报
回复
引用 5 楼 lis2012 的回复:
[quote=引用 4 楼 lx624909677 的回复:] [quote=引用 3 楼 lis2012 的回复:] 最好通过LPVOID lpParamenter参数将CDialogEx对象传递到多线程中,这样就可以直接访问了
传递的是类对象,想要调用类里面的方法,还是需要通过对象来调用,直接写变量名,那不成了全局变量了吗[/quote] 你的多线程不是在CControlDebugDlg实例里面运行的吗,这样的话CControlDebugDlg对象一定是早于线程产生,晚于其释放,为什么要是全局变呢?[/quote] nMachine这个是另外一个类里的吧
lis2012 2014-12-25
  • 打赏
  • 举报
回复
引用 4 楼 lx624909677 的回复:
[quote=引用 3 楼 lis2012 的回复:] 最好通过LPVOID lpParamenter参数将CDialogEx对象传递到多线程中,这样就可以直接访问了
传递的是类对象,想要调用类里面的方法,还是需要通过对象来调用,直接写变量名,那不成了全局变量了吗[/quote] 你的多线程不是在CControlDebugDlg实例里面运行的吗,这样的话CControlDebugDlg对象一定是早于线程产生,晚于其释放,为什么要是全局变呢?
lx624909677 2014-12-25
  • 打赏
  • 举报
回复
引用 3 楼 lis2012 的回复:
最好通过LPVOID lpParamenter参数将CDialogEx对象传递到多线程中,这样就可以直接访问了
传递的是类对象,想要调用类里面的方法,还是需要通过对象来调用,直接写变量名,那不成了全局变量了吗
lis2012 2014-12-25
  • 打赏
  • 举报
回复
最好通过LPVOID lpParamenter参数将CDialogEx对象传递到多线程中,这样就可以直接访问了
lx624909677 2014-12-25
  • 打赏
  • 举报
回复
nMachine这个的声明在哪儿?他是另外一个类里的吗?是的话当然不能直接用了
jacksonfan 2014-12-25
  • 打赏
  • 举报
回复
通过类对象调用成员变量 先定义一个类对象
Evankaka 2014-12-25
  • 打赏
  • 举报
回复
CControlDebugDlg *dlg=(CControlDebugDlg*)lpParamenter); dlg.nMachine=x.
江城一 2014-12-25
  • 打赏
  • 举报
回复
你的线程函数前面加static 在声明的时候
lx624909677 2014-12-25
  • 打赏
  • 举报
回复
引用 11 楼 lis2012 的回复:
[quote=引用 10 楼 lx624909677 的回复:] [quote=引用 9 楼 lis2012 的回复:] [quote=引用 8 楼 lx624909677 的回复:] [quote=引用 7 楼 lis2012 的回复:] 类成员变量
既然是类的成员变量,为什么还要传递自己的对象进来[/quote] 你最好去看一下 多线程函数方面的讲解[/quote] 还请先指点一二,我的做法把线程作为类的友元函数就可以了,不知你说的类自己传递自己是如何做?[/quote] 又不是访问保护变量或者私有变量,没有必要使用友元函数[/quote] 用友元函数的目的也不是为了访问私有变量吧,他这个线程函数是类的一个成员函数,为何还要传递一个自己进去?
lis2012 2014-12-25
  • 打赏
  • 举报
回复
引用 10 楼 lx624909677 的回复:
[quote=引用 9 楼 lis2012 的回复:] [quote=引用 8 楼 lx624909677 的回复:] [quote=引用 7 楼 lis2012 的回复:] 类成员变量
既然是类的成员变量,为什么还要传递自己的对象进来[/quote] 你最好去看一下 多线程函数方面的讲解[/quote] 还请先指点一二,我的做法把线程作为类的友元函数就可以了,不知你说的类自己传递自己是如何做?[/quote] 又不是访问保护变量或者私有变量,没有必要使用友元函数
lx624909677 2014-12-25
  • 打赏
  • 举报
回复
引用 9 楼 lis2012 的回复:
[quote=引用 8 楼 lx624909677 的回复:] [quote=引用 7 楼 lis2012 的回复:] 类成员变量
既然是类的成员变量,为什么还要传递自己的对象进来[/quote] 你最好去看一下 多线程函数方面的讲解[/quote] 还请先指点一二,我的做法把线程作为类的友元函数就可以了,不知你说的类自己传递自己是如何做?

15,473

社区成员

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

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