关于 《深入浅出MFC >> FRAME7.03 FRAME8.03 的编译错误的问题!!!

nikitar 2002-06-13 11:22:16

编译通不过, 报如下错
/////////////////////////////////////////////////////////////////////
--------------------Configuration: my - Win32 Debug--------------------
Compiling...
MFC.CPP
d:\source_code\dissect\frame8.03\mfc.cpp(165) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\mfc.cpp(169) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\mfc.cpp(173) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\mfc.cpp(177) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\mfc.cpp(181) : error C2101: '&' on constant
MY.CPP
d:\source_code\dissect\frame8.03\my.cpp(18) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\my.cpp(22) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\my.cpp(26) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\my.cpp(30) : error C2101: '&' on constant
d:\source_code\dissect\frame8.03\my.cpp(55) : warning C4018: '==' : signed/unsigned mismatch
Generating Code...
Error executing xicl6.exe.

my.exe - 9 error(s), 1 warning(s)
/////////////////////////////////////////////////////////////////////

请问是什么问题? 如何解决?
...全文
67 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anco 2002-06-20
  • 打赏
  • 举报
回复
我今天也提出了这个问题,但是没有人能解决。
http://www.csdn.net/expert/topic/815/815726.xml?temp=.8262751
nikitar 2002-06-13
  • 打赏
  • 举报
回复
请把被注释掉的

ON_COMMAND( , )


的// 去掉!!!!!


nikitar 2002-06-13
  • 打赏
  • 举报
回复
afxmsg_.h

/////////////////////////////////////////////////////////////
enum AfxSig
{
AfxSig_end = 0, // [marks end of message map]
AfxSig_vv,
};

#define ON_COMMAND(id, memberFxn) \
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },


//////////////////////////////////////////////

mfc.h
/////////////////////////////////////////////
#define TRUE 1
#define FALSE 0

typedef char* LPSTR;
typedef const char* LPCSTR;

typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef int INT;
typedef unsigned int UINT;
typedef long LONG;

#define WM_COMMAND 0x0111
#define CObjectid 0xffff
#define CCmdTargetid 1
#define CWinThreadid 11
#define CWinAppid 111
#define CMyWinAppid 1111
#define CWndid 12
#define CFrameWndid 121
#define CMyFrameWndid 1211
#define CViewid 122
#define CMyViewid 1221
#define CDocumentid 13
#define CMyDocid 131

#include <iostream.h>

///////////////////////////////////////////////////////////////////////
// Window message map handling

struct AFX_MSGMAP_ENTRY; // declared below after CWnd

struct AFX_MSGMAP
{
AFX_MSGMAP* pBaseMessageMap;
AFX_MSGMAP_ENTRY* lpEntries;
};

#define DECLARE_MESSAGE_MAP() \
static AFX_MSGMAP_ENTRY _messageEntries[]; \
static AFX_MSGMAP messageMap; \
virtual AFX_MSGMAP* GetMessageMap() const;

#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_MSGMAP theClass::messageMap = \
{ &(baseClass::messageMap), \
(AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries) }; \
AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{

#define END_MESSAGE_MAP() \
{ 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
};

// Message map signature values and macros in separate header
#include <afxmsg_.h>

class CObject
{
public:
CObject::CObject() {
}
CObject::~CObject() {
}
};

class CCmdTarget : public CObject
{
public:
CCmdTarget::CCmdTarget() {
}
CCmdTarget::~CCmdTarget() {
}
DECLARE_MESSAGE_MAP() // base class - no {{ }} macros
};

typedef void (CCmdTarget::*AFX_PMSG)(void);

struct AFX_MSGMAP_ENTRY // MFC 4.0
{
UINT nMessage; // windows message
UINT nCode; // control code or WM_NOTIFY code
UINT nID; // control ID (or 0 for windows messages)
UINT nLastID; // used for entries specifying a range of control id's
UINT nSig; // signature type (action) or pointer to message #
AFX_PMSG pfn; // routine to call (or special value)
};

class CWinThread : public CCmdTarget
{
public:
CWinThread::CWinThread() {
}
CWinThread::~CWinThread() {
}

virtual BOOL InitInstance() {
cout << "CWinThread::InitInstance \n";
return TRUE;
}
virtual int Run() {
cout << "CWinThread::Run \n";
return 1;
}
};

class CWnd;

class CWinApp : public CWinThread
{
public:
CWinApp* m_pCurrentWinApp;
CWnd* m_pMainWnd;

public:
CWinApp::CWinApp() {
m_pCurrentWinApp = this;
}
CWinApp::~CWinApp() {
}

virtual BOOL InitApplication() {
cout << "CWinApp::InitApplication \n";
return TRUE;
}
virtual BOOL InitInstance() {
cout << "CWinApp::InitInstance \n";
return TRUE;
}
virtual int Run() {
cout << "CWinApp::Run \n";
return CWinThread::Run();
}

DECLARE_MESSAGE_MAP()
};

typedef void (CWnd::*AFX_PMSGW)(void);
// like 'AFX_PMSG' but for CWnd derived classes only

class CDocument : public CCmdTarget
{
public:
CDocument::CDocument() {
}
CDocument::~CDocument() {
}
DECLARE_MESSAGE_MAP()
};

class CWnd : public CCmdTarget
{
public:
CWnd::CWnd() {
}
CWnd::~CWnd() {
}

virtual BOOL Create();
BOOL CreateEx();
virtual BOOL PreCreateWindow();

DECLARE_MESSAGE_MAP()
};

class CFrameWnd : public CWnd
{
public:
CFrameWnd::CFrameWnd() {
}
CFrameWnd::~CFrameWnd() {
}
BOOL Create();
virtual BOOL PreCreateWindow();

DECLARE_MESSAGE_MAP()
};

class CView : public CWnd
{
public:
CView::CView() {
}
CView::~CView() {
}
DECLARE_MESSAGE_MAP()
};

// global function
CWinApp* AfxGetApp();


///////////////////////////////////////////////////////////////
mfc.cpp
//////////////////////////////////////////////////////////////

#include "my.h" // it should be mfc.h, but for CMyWinApp definition, so...

extern CMyWinApp theApp;

BOOL CWnd::Create()
{
cout << "CWnd::Create \n";
return TRUE;
}

BOOL CWnd::CreateEx()
{
cout << "CWnd::CreateEx \n";
PreCreateWindow();
return TRUE;
}

BOOL CWnd::PreCreateWindow()
{
cout << "CWnd::PreCreateWindow \n";
return TRUE;
}

BOOL CFrameWnd::Create()
{
cout << "CFrameWnd::Create \n";
CreateEx();
return TRUE;
}

BOOL CFrameWnd::PreCreateWindow()
{
cout << "CFrameWnd::PreCreateWindow \n";
return TRUE;
}

CWinApp* AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}

AFX_MSGMAP* CCmdTarget::GetMessageMap() const // JJHOU: in MFC 40 cmdtarg.cpp
{
return &CCmdTarget::messageMap;
}

AFX_MSGMAP CCmdTarget::messageMap = // JJHOU: in MFC 40 cmdtarg.cpp
{
NULL,
&CCmdTarget::_messageEntries[0]
};

AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries[] = // JJHOU: in in MFC 40 cmdtarg.cpp
{
// { 0, 0, 0, 0, AfxSig_end, 0 } // nothing here
{ 0, 0, CCmdTargetid, 0, AfxSig_end, 0 }

};

BEGIN_MESSAGE_MAP(CWnd, CCmdTarget)
//ON_COMMAND(CWndid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CFrameWnd, CWnd)
//ON_COMMAND(CFrameWndid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CDocument, CCmdTarget)
//ON_COMMAND(CDocumentid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CView, CWnd)
//ON_COMMAND(CViewid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CWinApp, CCmdTarget)
//ON_COMMAND(CWinAppid, 0)
END_MESSAGE_MAP()
nikitar 2002-06-13
  • 打赏
  • 举报
回复
my.cpp
//////////////////////////////////////////////////
#include "my.h"

CMyWinApp theApp;

BOOL CMyWinApp::InitInstance()
{
cout << "CMyWinApp::InitInstance \n";
m_pMainWnd = new CMyFrameWnd;
return TRUE;
}

CMyFrameWnd::CMyFrameWnd()
{
Create();
}

BEGIN_MESSAGE_MAP(CMyWinApp, CWinApp)
ON_COMMAND(CMyWinAppid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
//ON_COMMAND(CMyFrameWndid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CMyDoc, CDocument)
//ON_COMMAND(CMyDocid, 0)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CMyView, CView)
//ON_COMMAND(CMyViewid, 0)
END_MESSAGE_MAP()

void printlpEntries(AFX_MSGMAP_ENTRY* lpEntry)
{
struct {
int classid;
char* classname;
} classinfo[] = {
CCmdTargetid , "CCmdTarget ",
CWinThreadid , "CWinThread ",
CWinAppid , "CWinApp ",
CMyWinAppid , "CMyWinApp ",
CWndid , "CWnd ",
CFrameWndid , "CFrameWnd ",
CMyFrameWndid, "CMyFrameWnd ",
CViewid , "CView ",
CMyViewid , "CMyView ",
CDocumentid , "CDocument ",
CMyDocid , "CMyDoc ",
0 , " "
};

for (int i=0; classinfo[i].classid != 0; i++)
{
if (classinfo[i].classid == lpEntry->nID)
{
cout << lpEntry->nID << " ";
cout << classinfo[i].classname << endl;
break;
}
}
}

void MsgMapPrinting(AFX_MSGMAP* pMessageMap)
{
for(; pMessageMap != NULL; pMessageMap = pMessageMap->pBaseMessageMap) {
AFX_MSGMAP_ENTRY* lpEntry = pMessageMap->lpEntries;
printlpEntries(lpEntry);
}
}

//------------------------------------------------------------------
// main
//------------------------------------------------------------------
void main()
{

CWinApp* pApp = AfxGetApp();

pApp->InitApplication();
pApp->InitInstance();
pApp->Run();

CMyDoc* pMyDoc = new CMyDoc;
CMyView* pMyView = new CMyView;
CFrameWnd* pMyFrame = (CFrameWnd*)pApp->m_pMainWnd;

// output Message Map construction
AFX_MSGMAP* pMessageMap = pMyView->GetMessageMap();
cout << endl << "CMyView Message Map : " << endl;
MsgMapPrinting(pMessageMap);

pMessageMap = pMyDoc->GetMessageMap();
cout << endl << "CMyDoc Message Map : " << endl;
MsgMapPrinting(pMessageMap);

pMessageMap = pMyFrame->GetMessageMap();
cout << endl << "CMyFrameWnd Message Map : " << endl;
MsgMapPrinting(pMessageMap);

pMessageMap = pApp->GetMessageMap();
cout << endl << "CMyWinApp Message Map : " << endl;
MsgMapPrinting(pMessageMap);
}


//////////////////////////////////////////////////////////////

my.h

///////////////////////////////////////////////////////////
#include <iostream.h>
#include "mfc.h"

class CMyWinApp : public CWinApp
{
public:
CMyWinApp::CMyWinApp() {
}
CMyWinApp::~CMyWinApp() {
}

virtual BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};

class CMyFrameWnd : public CFrameWnd
{
public:
CMyFrameWnd();
~CMyFrameWnd() {
}
DECLARE_MESSAGE_MAP()
};

class CMyDoc : public CDocument
{
public:
CMyDoc::CMyDoc() {
}
CMyDoc::~CMyDoc() {
}
DECLARE_MESSAGE_MAP()
};

class CMyView : public CView
{
public:
CMyView::CMyView() {
}
CMyView::~CMyView() {
}
DECLARE_MESSAGE_MAP()
};
tc113 2002-06-13
  • 打赏
  • 举报
回复
'&' on constant

The address-of operator ( & ) must have an l-value as operand. The following sample generates C2101:

// C2101.cpp
int main() {
char test;
test = &'a'; // C2101, remove the & to resolve
}
上面是msdn中关于这个错误的解释了。
你可以把代码贴出来了,

16,472

社区成员

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

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

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