非静态成员函数的非法调用问题 求解!!!

qq_29720391 2017-10-17 10:58:19
在这里我需要在新建的对话框类和视图类中调用Cwnd中的定时器ontimer()函数,但是出现非静态函数的非法调用问题,
求解如何调用其类中的非静态成员函数,求给出具体的解决过程和代码
...全文
1617 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29720391 2017-10-18
  • 打赏
  • 举报
回复
谢谢大家, 解决了,应该是我不需要调用父类的OnTimer的方法, 会导致定时器递归调用进入死循环。
阿源是少年 2017-10-17
  • 打赏
  • 举报
回复
调用非静态成员函数需要对象指针
red-fly 2017-10-17
  • 打赏
  • 举报
回复
在CLogin中自己的代码后面调用父类的OnTimer()是可以的,没有任何问题。用类向导的消息部分给CLogin添加OnTimer()函数,确保OnTimer走的是正常调用流程
qq_29720391 2017-10-17
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
CLogin 不是派生自 CWnd ?
派生的CDialog,对话框类啊, 所以想知道如何调用其他类中的非静态函数的操作
red-fly 2017-10-17
  • 打赏
  • 举报
回复
CLogin是从CDialog派生,还是从CDialogEx派生的?
qq_29720391 2017-10-17
  • 打赏
  • 举报
回复
引用 5 楼 pcradio 的回复:
调用非静态成员函数需要对象指针
能否写出具体实现过程呢?
qq_29720391 2017-10-17
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
写一个和OnTimer函数功能几乎一模一样的静态函数 ?
额 直接在新生成的CLogin类中构造一个一样的静态函数?
schlafenhamster 2017-10-17
  • 打赏
  • 举报
回复
派生类 调 父类 没问题 的 void CMyDlg::OnTimer(UINT nIDEvent) { th+=0.314;// 0.1pi if(th>6.28) th-=6.28;// 2pi Invalidate(); CDialog::OnTimer(nIDEvent); }
向立天 2017-10-17
  • 打赏
  • 举报
回复
OnTimer是消息函数,应该尽量避免直接调用 而且你这里好像完全没有必要调用CWnd的OnTimer吧
schlafenhamster 2017-10-17
  • 打赏
  • 举报
回复
CLogin 不是派生自 CWnd ?
赵4老师 2017-10-17
  • 打赏
  • 举报
回复
写一个和OnTimer函数功能几乎一模一样的静态函数 ?
smwhotjay 2017-10-17
  • 打赏
  • 举报
回复
OnTimer 我从来没主动调用过。都是重载OnTimer处理自己的定时器逻辑。settimer 启动,无需手动 xx->OnTimer
schlafenhamster 2017-10-17
  • 打赏
  • 举报
回复
CDialogEx::OnTimer(nIDEvent);// 调用 父类 不必要 !
向立天 2017-10-17
  • 打赏
  • 举报
回复
引用 25 楼 qq_29720391 的回复:
[quote=引用 23 楼 xianglitian 的回复:] [quote=引用 13 楼 qq_29720391 的回复:] [quote=引用 6 楼 xianglitian 的回复:] OnTimer是消息函数,应该尽量避免直接调用 而且你这里好像完全没有必要调用CWnd的OnTimer吧
额 不进行定时器设置的话,我按键不能达到循环操作,只能运行一次。。[/quote]你在派生类中定义时钟消息就可以了 没有必要一定调用父类的函数 CDialogEx::OnTimer(nIDEvent); 这句可以去掉[/quote] 这句去掉了,定时器就不起作用了。 如何定义一个时钟消息,能让我按下按钮达到长按目的呢? [/quote] 去掉不起作用? 但是加上不是编译不过去么 所以你创建时钟了么? 连接时钟消息了么? CDialogEx::OnTimer(nIDEvent);这句肯定不会导致时钟消息不执行的
red-fly 2017-10-17
  • 打赏
  • 举报
回复
楼主自己不仔细检查代码,又不贴出来让大家看一下,那估计也真没有人能帮上忙了
red-fly 2017-10-17
  • 打赏
  • 举报
回复
建议楼主好好梳理一下上面的贴子,可以下载一个demo去看下。 上面说的没错,肯定是楼主没有仔细查看代码。 楼主可以把相关的4个文件代码贴出来,并把编译错误的内容贴出来
向立天 2017-10-17
  • 打赏
  • 举报
回复
引用 13 楼 qq_29720391 的回复:
[quote=引用 6 楼 xianglitian 的回复:] OnTimer是消息函数,应该尽量避免直接调用 而且你这里好像完全没有必要调用CWnd的OnTimer吧
额 不进行定时器设置的话,我按键不能达到循环操作,只能运行一次。。[/quote]你在派生类中定义时钟消息就可以了 没有必要一定调用父类的函数 CDialogEx::OnTimer(nIDEvent); 这句可以去掉
red-fly 2017-10-17
  • 打赏
  • 举报
回复
原始的错误提示就是因为你的这个错误引起的,而不是所谓的静态函数问题。你的那种写法,编译器会以为是要调用静态函数呢,所以就提示了错误
red-fly 2017-10-17
  • 打赏
  • 举报
回复
你的类既然是从CDialog派生的,那你的OnTimer()函数里的CDialogEx::OnTimer(nIDEvent)就不对了,应该用 CDialog::OnTimer(nIDEvent)才行
red-fly 2017-10-17
  • 打赏
  • 举报
回复
你类派生的那一行贴出来看一下
加载更多回复(11)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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