首页
社区
课程
招聘
vc++ MFC程序中SetTimer调用无法通过编译!请指点
发表于: 2010-6-7 22:26 7441

vc++ MFC程序中SetTimer调用无法通过编译!请指点

2010-6-7 22:26
7441
这个问题首先在头文件作如下定义
#define ANIMAL_ID 1112
然后在check控件事件中关联m_animal
事件代码如下:
void CPAGE_TVSHOW::OnChkAnimal()
{
        // TODO: Add your control notification handler code here
        UpdateData(TRUE);
        if(m_animal)
        {
                SetTimer(ANIMAL_ID,10000,(TIMERPROC)&ANIMAL);
        }
        else
        {
                KillTimer(ANIMAL_ID);
        }
}

这里编译时提示如下错误
PAGE_TVSHOW.cpp
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(72) : error C2143: syntax error : missing ')' before ';'
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(72) : error C2660: 'SetTimer' : function does not take 1 parameters
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(72) : error C2143: syntax error : missing ';' before ','
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(72) : error C2059: syntax error : ')'
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(76) : error C2143: syntax error : missing ')' before ';'
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(76) : error C2059: syntax error : ')'
Error executing cl.exe.

但如果将check控件事件代码改为如下
void CPAGE_TVSHOW::OnChkAnimal()
{
        // TODO: Add your control notification handler code here
        UpdateData(TRUE);
        if(m_animal)
        {
                SetTimer(1112,10000,(TIMERPROC)&ANIMAL);
        }
        else
        {
                KillTimer(1112);
        }
}
就能顺利通过编译执行,请知道所以然的大侠们指点下,谢谢!

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 249
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
头文件没包含进来?
2010-6-8 07:14
0
雪    币: 197
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

  呃,没说清楚不好意思,头文件包含进去了,提示这个。。。
2010-6-8 08:13
0
雪    币: 2513
活跃值: (640)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
感觉还是头文件包含的问题
2010-6-8 08:56
0
雪    币: 101
活跃值: (157)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
感觉是ANIMAL_ID这个宏定义出问题了..
2010-6-8 09:13
0
雪    币: 197
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

嗯,刚刚翻书解决能通过编译了。
这位兄弟说的很接近,解决方法如下,将之前的#define ANIMAL_ID 1112注译
然后在vc6的查看| 资源符合内新建符号ID,ID_ANIMAL 值为默认,
再        SetTimer(ID_ANIMAL,10000,(TIMERPROC)&ANIMAL);
这样就编译通过了,谢谢大家!
不过很离谱的事,我编了两个这程序,第一个用手动的#define 没有编译问题,
真奇怪。希望知道的大虾们能说说是什么情况
2010-6-8 09:22
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
因为你原来的宏定义是
#define ANIMAL_ID 1112;
而不是
#define ANIMAL_ID 1112

多了一个分号,细心很重要
2010-6-8 09:56
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
8
D:\debug c\21day c++\Event notice assistant\PAGE_TVSHOW.cpp(72) : error C2660: 'SetTimer' : function does not take 1 parameters

很明显是宏出问题了   编译器把宏解析后  都把SetTimer翻译成一个参数了~~  先清理一下,把中间文件都去掉  重新编译  如果还是出问题 就真的见鬼了~
2010-6-8 09:58
0
雪    币: 211
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我怎么没发现他的定义后面有“;”的、、、
2010-6-8 11:25
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
存在某些“自己写的代码”与“帖子的代码”不一致的人,我估计99%LZ属于这类人。
如果LZ的宏定义最后确实多了一个分号,那么出错提示将完全匹配。
2010-6-8 14:08
0
雪    币: 197
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11

我的错,按照楼主思路刚刚检查了代码,发现的确是宏定义多了分号,寒啊
感谢 wzanthony, 谢谢大家 此贴结贴
2010-6-8 19:46
0
雪    币: 197
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我也没注意到,是我没有贴出宏定义的代码,我的错!
2010-6-8 19:47
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码