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

2019-05-12 10:23发布

我使用Visual Studio 2005中,我创建一个名为“StdAfx扶养”基于MFC控制台应用程序。 在IDE中创建以下文件给我。

  1. RESOURCE.H
  2. StdAfx Dependancy.h
  3. stdafx.h中
  4. StdAfx Dependancy.cpp
  5. stdafx.cpp

我添加了另一个类CHelper与Helper.h和Helper.cpp如下。

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)
{
}

我创建一个对象CHelper在主函数; 实现这一点,我加入StdAfx Dependancy.cpp如下的第一行Header.h文件; 而我得到了以下错误。

d:\代码\ stdafx扶养\ stdafx扶养\ stdafx dependancy.cpp(33):错误C2065:CHelper':未声明的标识符
d:\代码\ stdafx扶养\ stdafx扶养\ stdafx dependancy.cpp(33):错误C2146:语法错误:缺少 ';' 前识别符“myHelper”
d:\代码\ stdafx扶养\ stdafx扶养\ 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;
}

Answer 1:

这个环节必须给你一些线索。 stdafx.h中的用途

在之前定义的行#include "stdafx.h"被编译器忽略。 所以,如果你想实际包含这些文件,那么你需要后,包括他们#include "stdafx.h".

希望这是显而易见的。



Answer 2:

除了CKV的答案,这是毫无意义的,“stdafx.h中”任何不平凡的头文件之前的头文件将包含包含有框架类型(例如任何MFC类型)。



文章来源: StdAfx + Header file - Order of inclusion in MFC application