问题可见:http://topic.csdn.net/t/20051231/12/4492731.html
使用WTL新建一个对话框程序,但是加入按钮和按钮的点击事件处理函数之后,编译不通了
具体步骤很简单,用默认设置建立一个基于对话框的程序,这个时候编译可以通过,一切正常,
然后在资源视图中朝主窗口MainDlg拖放一个按钮,这个时候编译也可以通过,
然后在资源视图中双击新增的按钮,增加默认的OnBnClickedXXXXX事件处理函数,这个时候编译出现如下错误提示:
error C2065: “IDD_MAINDLG” : 未声明的标识符
error C2143: 语法错误 : 缺少“,”(在“<”的前面)
error C2143: 语法错误 : 缺少“;”(在“public”的前面)
error C2146: 语法错误 : 缺少“;”(在标识符“END_UPDATE_UI_MAP”的前面)
error C2504: “CUpdateUI” : 未定义基类
warning C4183: “BEGIN_UPDATE_UI_MAP”: 缺少返回类型;假定为返回“int”的成员函数
warning C4183: “END_UPDATE_UI_MAP”: 缺少返回类型;假定为返回“int”的成员函数
不知道这是什么原因?是我添加事件处理函数的方式有问题?或者是其他原因,请有方面经验的兄弟指点一下。谢谢!
我使用的是VS.NET 2003,WTL版本为7.5最终稳定发布版,路径设置也没有问题,默认情况下是可以编译通过的。
想问问CCF有没有兄弟用WTL的?我那个问题在CSDN上挂了快两年,居然没人搭理,在google上用“error C2504 CUpdateUI 未定义基类”为关键字搜索,只有两个结果,可见用的人确实不多啊。
在公司的时候自己花了点时间找到了解决办法,可惜公司论坛挂了之后被人给删了,今天又遇到了,再次花时间搞了一下,记录一下,也给比我更菜的兄弟(如果有的话,呵呵)一个机会不走弯路。
我个人认为原因应该是因为IDE默认在.cpp中放置实现代码,而没有添加适当的头文件,导致模板实例化的时候不能找到合适的基类。
解决方法:
在stdafx.h最后添加:
#include <atlframe.h>
#include "resource.h"
(然后可以去掉"你的项目名.cpp"中的相同两行)
在maindlg.h开始添加:
#include "aboutdlg.h"
虽然是解决了,但是resource.h放在stdafx.h里面总觉得怪怪的,不知道有没有其他更好的办法,请高手指教。
使用WTL新建一个对话框程序,但是加入按钮和按钮的点击事件处理函数之后,编译不通了
具体步骤很简单,用默认设置建立一个基于对话框的程序,这个时候编译可以通过,一切正常,
然后在资源视图中朝主窗口MainDlg拖放一个按钮,这个时候编译也可以通过,
然后在资源视图中双击新增的按钮,增加默认的OnBnClickedXXXXX事件处理函数,这个时候编译出现如下错误提示:
error C2065: “IDD_MAINDLG” : 未声明的标识符
error C2143: 语法错误 : 缺少“,”(在“<”的前面)
error C2143: 语法错误 : 缺少“;”(在“public”的前面)
error C2146: 语法错误 : 缺少“;”(在标识符“END_UPDATE_UI_MAP”的前面)
error C2504: “CUpdateUI” : 未定义基类
warning C4183: “BEGIN_UPDATE_UI_MAP”: 缺少返回类型;假定为返回“int”的成员函数
warning C4183: “END_UPDATE_UI_MAP”: 缺少返回类型;假定为返回“int”的成员函数
不知道这是什么原因?是我添加事件处理函数的方式有问题?或者是其他原因,请有方面经验的兄弟指点一下。谢谢!
我使用的是VS.NET 2003,WTL版本为7.5最终稳定发布版,路径设置也没有问题,默认情况下是可以编译通过的。
想问问CCF有没有兄弟用WTL的?我那个问题在CSDN上挂了快两年,居然没人搭理,在google上用“error C2504 CUpdateUI 未定义基类”为关键字搜索,只有两个结果,可见用的人确实不多啊。
在公司的时候自己花了点时间找到了解决办法,可惜公司论坛挂了之后被人给删了,今天又遇到了,再次花时间搞了一下,记录一下,也给比我更菜的兄弟(如果有的话,呵呵)一个机会不走弯路。
我个人认为原因应该是因为IDE默认在.cpp中放置实现代码,而没有添加适当的头文件,导致模板实例化的时候不能找到合适的基类。
解决方法:
在stdafx.h最后添加:
#include <atlframe.h>
#include "resource.h"
(然后可以去掉"你的项目名.cpp"中的相同两行)
在maindlg.h开始添加:
#include "aboutdlg.h"
虽然是解决了,但是resource.h放在stdafx.h里面总觉得怪怪的,不知道有没有其他更好的办法,请高手指教。