StdAfx + Header file - Порядок включения в приложение MFC - PullRequest
2 голосов
/ 22 июня 2010

Я использую Visual Studio 2005. Я создал консольное приложение на основе MFC под названием «Зависимость StdAfx». В 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 в основной функции; Для этого я добавил файл Header.h в первую строку StdAfx Dependancy.cpp, как показано ниже; и я получил следующие ошибки.

d: \ codes \ stdafx зависимость \ stdafx зависимость \ stdafx depenancy.cpp (33): ошибка C2065: «CHelper»: не объявлено Идентификатор
d: \ Коды \ stdafx зависимость \ stdafx зависимость \ stdafx зависимость.cpp (33): ошибка C2146: синтаксическая ошибка: отсутствует ';' до идентификатор «myHelper»
d: \ Коды \ stdafx зависимость \ stdafx зависимость \ stdafx зависимость.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 ]

5 голосов
/ 22 июня 2010

Эта ссылка должна дать вам некоторую подсказку. Назначение stdafx.h

Строки, определенные перед #include "stdafx.h", игнорируются компилятором.Поэтому, если вы действительно хотите включить эти файлы, вам нужно включить их после #include "stdafx.h".

Надеюсь, что все ясно.

1 голос
/ 22 июня 2010

В дополнение к ответу ckv не имеет смысла включать заголовочные файлы перед "stdafx.h", поскольку любой нетривиальный заголовочный файл будет содержать включенные в него типы инфраструктуры (например, любые типы MFC).

...