如题。
我将#include "UserLogon.h"(CUserLogon是自定义的对话框类)放在stdafx.h中就出现:
错误 error C2065: “IDD_LOGON”: 未声明的标识符。
可是放在App类的头文件中就不会错,如下代码(是App头文件)
#pragma once
#ifndef __AFXWIN_H__
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif
#include "resource.h" // 主符号
#include "UserLogon.h"//我自定义的对话框类的头文件
// CQQApp:
// 有关此类的实现,请参阅 QQ.cpp
//
class CQQApp : public CWinApp
{
public:
CQQApp();
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
public:
CUserLogon m_UserLogon;
};
extern CQQApp theApp;
或者是放在App的实现文件中也不会出错,我想问一下这是为什么?在什么时候自定义类的头文件可以放在stdafx.h中呢?

解决方案 »

  1.   

    我一般如果很多文件都需要包含同一个.h文件的话,我就把这个.h文件#include到stdafx.h中
      

  2.   

    错误 error C2065: “IDD_LOGON”: 未声明的标识符。
    要在include你的头文件之前加入resource.h。
    我一般这么做,不涉及resource.h的头文件,如果比较短,就加入到stdafx.h
      

  3.   

    因为你现在的里面有#include "resource.h"   可以把这两个都放在stdafx里
      

  4.   

    stdafx.h文件设置的目的是为了加速VisualStudio的编译过程,具体实现就是根据stdafx.h所包含的文件生成pch预编译的目标文件。并不是所有文件都适合放在stdafx.h里面,特别是对于项目特定的文件(例如你定义的类头文件),这些文件应该被明确地包含在需要的地方,否则对目标代码复用时,需要连带stdafx.h一起复用,而它里面可能包含了许多不需要的头文件引用。此外,resource.h也不太适合放在这里面,因为它通常会频繁地发生变化,这就意味着预编译过程也会频繁地进行,那设置该文件的初衷就达不到了。可以将如windows.h,sstream,stdlib等此类系统标准头文件放到stdafx.h文件中,以提升编译速度。
      

  5.   

    对于你的情况,因为IDD_LOGIN是登录对话框的ID号,而该值定义在resource.h文件中。你的UserLogin.h使用了定义在resource.h文件中的这个ID。具体来说,如果你希望将UserLogin.h放在stdafx.h中,那么要将resource.h放在包含UserLogin.h的前面就可以了
      

  6.   

    “对于你的情况,因为IDD_LOGIN是登录对话框的ID号,而该值定义在resource.h文件中。你的UserLogin.h使用了定义在resource.h文件中的这个ID。具体来说,如果你希望将UserLogin.h放在stdafx.h中,那么要将resource.h放在包含UserLogin.h的前面就可以了”这才是正解。
      

  7.   

    "stdafx.h文件设置的目的是为了加速VisualStudio的编译过程,具体实现就是根据stdafx.h所包含的文件生成pch预编译的目标文件。并不是所有文件都适合放在stdafx.h里面,特别是对于项目特定的文件(例如你定义的类头文件),这些文件应该被明确地包含在需要的地方,否则对目标代码复用时,需要连带stdafx.h一起复用,而它里面可能包含了许多不需要的头文件引用。此外,resource.h也不太适合放在这里面,因为它通常会频繁地发生变化,这就意味着预编译过程也会频繁地进行,那设置该文件的初衷就达不到了。可以将如windows.h,sstream,stdlib等此类系统标准头文件放到stdafx.h文件中,以提升编译速度。"这才是正解。刚才复制错了,不好意思。