StdAfx +头文件 - MFC应用程序中包含的顺序

时间:2010-06-22 05:19:55

标签: c++ visual-c++ mfc compiler-errors stdafx.h

我正在使用Visual Studio 2005.我创建了一个名为“StdAfx dependancy”的基于MFC的控制台应用程序。 IDE为我创建了以下文件。

  1. RESOURCE.H
  2. StdAfx Dependancy.h
  3. stdafx.h中
  4. StdAfx Dependancy.cpp
  5. stdafx.cpp
  6. 我在Helper.h和Helper.cpp中添加了另一个类CHelper,如下所示。

    Helper.h:

    #pragma once
    
    class CHelper
    {
    public:
        CHelper(void);
        ~CHelper(void);
    };
    

    Helper.cpp

    #include "StdAfx.h"
    #include "Helper.h"
    
    CHelper::CHelper(void)
    {
    }
    
    CHelper::~CHelper(void)
    {
    }
    

    我在main函数中为CHelper创建了一个对象;为实现这一点,我在StdAfx Dependancy.cpp的第一行添加了Header.h文件,如下所示;我收到了以下错误。

      

    d:\ codes \ stdafx dependancy \ stdafx   dependancy \ stdafx dependancy.cpp(33):   错误C2065:'CHelper':未声明   标识
      d:\代码\ stdafx   依赖\ stdafx dependancy \ stdafx   dependancy.cpp(33):错误C2146:   语法错误:缺少';'之前   标识符'myHelper'
      d:\代码\ stdafx   依赖\ stdafx dependancy \ stdafx   dependancy.cpp(33):错误C2065:   'myHelper':未声明的标识符

    但是当我在stdafx.h之后加入它时,错误消失了。为什么呢?

    // Stdafx dependancy.cpp : Defines the entry point for the console application.
    //
    
    #include "Helper.h"
    
    #include "stdafx.h"
    #include "Stdafx dependancy.h"
    
    // #include "Helper.h" --> If I include it here, there is no compilation error
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // The one and only application object
    
    CWinApp theApp;
    
    using namespace std;
    
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
        int nRetCode = 0;
    
        // initialize MFC and print and error on failure
        if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
        {
            // TODO: change error code to suit your needs
            _tprintf(_T("Fatal Error: MFC initialization failed\n"));
            nRetCode = 1;
        }
        else
        {
            CHelper myHelper;
        }
    
        return nRetCode;
    }
    

2 个答案:

答案 0 :(得分:5)

这个链接必须给你一些线索。 Purpose of stdafx.h

之前定义的行  编译器会忽略#include "stdafx.h"。因此,如果您想要实际包含这些文件,则需要在#include "stdafx.h".

之后包含它们

希望很清楚。

答案 1 :(得分:1)

除了ckv的答案之外,在“stdafx.h”之前包含头文件是没有意义的,因为任何非平凡的头文件都将包含那里包含的框架类型(例如任何MFC类型)。