使用VS2012调试Hello MFC的问题

cang1994cang 2016-03-09 11:31:46
报错在hello.cpp中,一下是代码
#include "stdafx.h"
#include "Hello.h"
#include "Resource.h"

CMyWinAPP theApp; //application object

//----------------------------------------------------------------
// CMyWinAPP's member
//----------------------------------------------------------------
BOOL CMyWinAPP::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//----------------------------------------------------------------
// CMyFrameWnd'smember
//----------------------------------------------------------------
CMyFrameWnd::CMyFrameWnd()
{
Create(NULL, _T("Hello MFC"), WS_OVERLAPPEDWINDOW, rectDefault,
NULL, _T("MainMenu")); //"MainMenu"定义于RC档
}
//----------------------------------------------------------------
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_COMMAND(IDM_ABOUT,OnAbout)
ON_WM_PAINT()
END_MESSAGE_MAP()
//----------------------------------------------------------------
void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect;

GetClientRect(rect);

dc.SetTextAlign(TA_BOTTOM | TA_CENTER);

::LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2,
(LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc);
}
//----------------------------------------------------------------
VOID CALLBACK CMyFrameWnd::LineDDACallback(int x, int y, LPARAM lpdc)
{
WCHAR szText[] =L"Hello, MFC";
((CDC*)lpdc)->TextOutW(x,y,szText,sizeof(szText)-1);
for(int i=1; i<50000; i++); //纯粹是为了延迟下降速度,以利观察
}
//----------------------------------------------------------------
void CMyFrameWnd::OnAbout()
{
CDialog about(_T("AboutBox"), this); //"AboutBox"定义于RC档
about.DoModal();
}

下面是错误:
1>------ 已启动生成: 项目: MFCApplication2, 配置: Debug Win32 ------
1> Hello.cpp
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C2017: 非法的转义序列
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C2146: 语法错误: 缺少“}”(在标识符“n”的前面)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C2146: 语法错误: 缺少“;”(在标识符“n”的前面)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C2065: “n”: 未声明的标识符
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C3867: “CMyFrameWnd::OnAbout”: 函数调用缺少参数列表;请使用“&CMyFrameWnd::OnAbout”创建指向成员的指针
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(27): error C2059: 语法错误:“,”
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(28): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(28): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(28): error C2059: 语法错误:“,”
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2059: 语法错误:“}”
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2653: “TheBaseClass”: 不是类或命名空间名称
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2065: “GetThisMessageMap”: 未声明的标识符
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2065: “_messageEntries”: 未声明的标识符
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(29): error C2059: 语法错误:“return”
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(32): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:\users\john\documents\visual studio 2012\projects\mfcapplication2\mfcapplication2\hello.cpp(32): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
...全文
244 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cang1994cang 2016-03-14
  • 打赏
  • 举报
回复
自己找到的错误,分还要给出去什么的。。。这论坛也是烦
cang1994cang 2016-03-14
  • 打赏
  • 举报
回复
好吧,我自己找到错误了。。。 resource.h: //resource.h #define IDM_ABOUT 100\n 多了个\n所以什么都不做直接调试会出错 用sizeof(szText)-1显示"Hello, MFC"是宽字符,有22个字符,而“Hello, MFC”本身只有10个字符,剩下的12个字符随机取一些东西,所以是乱码。。。改成wcslen(szText)就好 for(int i=1; i<50000; i++); 减缓下降速度不好用,要改成::Sleep(100);才好。。。 就这些错误了。。。
笨笨仔 2016-03-10
  • 打赏
  • 举报
回复
用鼠标点击错误提示,定位到错误处
cang1994cang 2016-03-10
  • 打赏
  • 举报
回复
我把程序全放上来吧 resource.h: //resource.h #define IDM_ABOUT 100\n hello.rc: //hello.rc #include "Resource.h" #include "afxres.h" JJHouRIcon ICON DISCARDABLE "JJHOUR.ico" AFX_IDI_STD_FRAME ICON DISCARDABLE "JJHOUR.ico" MainMenu MENU DISCARDABLE { POPUP "&Help" { MENUITEM "&About HelloMFC...", IDM_ABOUT } } AboutBox DIALOG DISCARDABLE 34, 22, 147, 55 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About Hello" { ICON "JJHouRIcon",IDC_STATIC,11,17,18,20 LTEXT "Hello MFC 4.0",IDC_STATIC,40,10,52,8 LTEXT "Copyright 1996 Top Studio",IDC_STATIC,40,25,100,8 LTEXT "J.J.Hou",IDC_STATIC,40,40,100,8 DEFPUSHBUTTON "OK",IDOK,105,7,32,14,WS_GROUP } stdafx.h: // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 #include <afxwin.h> // MFC 核心组件和标准组件 #include <afxext.h> // MFC 扩展 #include <afxdisp.h> stdafx.cpp : // stdafx.cpp : 只包括标准包含文件的源文件 // MFCApplication2.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息 #include "stdafx.h" Hello.h: class CMyWinAPP : public CWinApp { public: BOOL InitInstance(); }; //---------------------------------------------------------------- class CMyFrameWnd : public CFrameWnd { public: CMyFrameWnd(); afx_msg void OnPaint(); afx_msg void OnAbout(); private: DECLARE_MESSAGE_MAP() static VOID CALLBACK LineDDACallback(int,int,LPARAM); }; Hello.cpp: #include "stdafx.h" #include "Hello.h" #include "Resource.h" CMyWinAPP theApp; //application object //---------------------------------------------------------------- // CMyWinAPP's member //---------------------------------------------------------------- BOOL CMyWinAPP::InitInstance() { m_pMainWnd = new CMyFrameWnd(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } //---------------------------------------------------------------- // CMyFrameWnd'smember //---------------------------------------------------------------- CMyFrameWnd::CMyFrameWnd() { Create(NULL, _T("Hello MFC"), WS_OVERLAPPEDWINDOW, rectDefault, NULL, _T("MainMenu")); //"MainMenu"定义于RC档 } //---------------------------------------------------------------- BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd) ON_COMMAND(IDM_ABOUT,OnAbout) ON_WM_PAINT() END_MESSAGE_MAP() //---------------------------------------------------------------- void CMyFrameWnd::OnPaint() { CPaintDC dc(this); CRect rect; GetClientRect(rect); dc.SetTextAlign(TA_BOTTOM | TA_CENTER); ::LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2, (LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc); } //---------------------------------------------------------------- VOID CALLBACK CMyFrameWnd::LineDDACallback(int x, int y, LPARAM lpdc) { WCHAR szText[] =L"Hello, MFC"; ((CDC*)lpdc)->TextOutW(x,y,szText,sizeof(szText)-1); for(int i=1; i<50000; i++); //纯粹是为了延迟下降速度,以利观察 } //---------------------------------------------------------------- void CMyFrameWnd::OnAbout() { CDialog about(_T("AboutBox"), this); //"AboutBox"定义于RC档 about.DoModal(); } 这是按侯捷《深入浅出MFC》中Hello MFC的内容打的程序,因为我用的VS2012,所以在报错后我在论坛和百度贴吧提过问,进行了修改,不再报错才调试,结果一调试就出了一大堆错,一楼就是调试结果。。。
zgl7903 2016-03-10
  • 打赏
  • 举报
回复
是不是 .h 中缺少了 DECLARE_MESSAGE_MAP( ) ?
cang1994cang 2016-03-10
  • 打赏
  • 举报
回复
引用 8 楼 weiweixiaopasta 的回复:
ON_COMMAND(IDM_ABOUT,OnAbout) 试试 ON_COMMAND(IDM_ABOUT,&CMyFrameWnd::OnAbout)
没用,和没改之前一样
schlafenhamster 2016-03-10
  • 打赏
  • 举报
回复
2012 与 vc6 有较大 差异,侯捷《深入浅出MFC》 是vc6 的,会有很多问题。 不如先 叫 2012 的 app 向导 创建一个 工程,编译 运行, 看看 向导 创建的 代码。
Jaccio 2016-03-10
  • 打赏
  • 举报
回复
ON_COMMAND(IDM_ABOUT,OnAbout) 试试 ON_COMMAND(IDM_ABOUT,&CMyFrameWnd::OnAbout)
cang1994cang 2016-03-10
  • 打赏
  • 举报
回复
注释掉 ON_COMMAND(IDM_ABOUT,OnAbout) ON_WM_PAINT() 两行,那干脆就不出字了 把这三行连之上那行一起注释掉,就出新错误了
cang1994cang 2016-03-10
  • 打赏
  • 举报
回复
错误在ON_COMMAND(IDM_ABOUT,OnAbout)
ON_WM_PAINT()
END_MESSAGE_MAP()

用//注释掉ON_COMMAND(IDM_ABOUT,OnAbout)
出现结果


而且文字不动
赵4老师 2016-03-09
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
cang1994cang 2016-03-09
  • 打赏
  • 举报
回复
没用,可能是错误多了,找不到

16,471

社区成员

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

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

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