我的头发要抓掉了,编译时出现一个莫名的错误,解决不了:(
用VC编个程序,没有用向导,但Use MFC in a Shared DLL.产生的主窗口由CMainFrame派生,编译时下列程序段中出现两个错误:
#if !defined(AFX_MODELESSDLG_H__9F273FA0_D4B9_4BB7_B6D8_83C6E5C39843__INCLUDED_)
#define AFX_MODELESSDLG_H__9F273FA0_D4B9_4BB7_B6D8_83C6E5C39843__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ModelessDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CModelessDlg dialog
class CModelessDlg : public CDialog
{
// Construction
public:
CModelessDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CModelessDlg)
enum {IDD=IDD_MODELESS_DLG};(此处报错!此处报错!此处报错!)
int m_nHeight;
int m_nWidth;
int m_nUnits;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CModelessDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
// Implementation
// Generated message map functions
//{{AFX_MSG(CModelessDlg)
virtual void OnCancel();
virtual void OnOK();
afx_msg void OnReset();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MODELESSDLG_H__9F273FA0_D4B9_4BB7_B6D8_83C6E5C39843__INCLUDED_)
错误信息如下:
Compiling resources...
Compiling...
MainFrm.cpp
ModelessDlg.cpp
PracticeApp.cpp
i:\my documents\my projects\practice\modelessdlg.h(21) : error C2065: 'IDD_MODELESS_DLG' : undeclared identifier
i:\my documents\my projects\practice\modelessdlg.h(21) : error C2057: expected constant expression
Error executing cl.exe.
Practice.exe - 2 error(s), 0 warning(s)
我找了半天也找不出来,对话框资源都定义了,没有什么低级错误.以前用MFC以不用向导的方式“手动”编程也出现过类似的资源方面的错误,有时Rebuild All一下就解决了,但这次没那么幸运,麻烦高手指导一下:)
问题点数:50、回复次数:6Top
1 楼steedhorse(晨星)回复于 2003-08-04 20:50:20 得分 10
是不是对话框的ID后来被你改掉了?已经不叫“IDD=IDD_MODELESS_DLG”了?Top
2 楼yuilan(于连)回复于 2003-08-04 21:05:02 得分 10
#include "resource.h"
Top
3 楼AkiraChing(水银)回复于 2003-08-04 21:13:16 得分 10
在resourceview里面右键单击任意资源,选中resource symbol,看看有没有IDD_MODELESS_DLG的定义,或者直接看看对话框的属性ID是什么,如果不是IDD_MODELESS_DLG则把它改为IDD_MODELESS_DLG.Top
4 楼shaohua(流氓大亨文盲高官)回复于 2003-08-04 21:13:46 得分 20
yuilan(于连) 兄的办法应该能帮你解决问题,如果yuilan(于连)兄的办法无效,那么你的
resource.h中肯定没有#define IDD_MODELESS_DLG XXXXX 之类的代码,(其中XXXX为一个
唯一的资源ID,即整数,如果没有,你可以自己加一个,要保证该整数不和已有的冲突,同
时注意resource.h文件底部的几个Next,不要让他们的范围包括你的ID。
Top
5 楼cyxcry(稀奇虫子)回复于 2003-08-04 21:26:13 得分 0
yuilan(于连) 兄真厉害,果真解决了,谢谢Top
6 楼cyxcry(稀奇虫子)回复于 2003-08-04 21:30:02 得分 0
我感觉#include "..."用的有点混乱,标准的写法一般是写在哪些文件里 *.cpp还是*.h?Top




