我正在使用Visual Studio 2005.我创建了一个名为“StdAfx dependancy”的基于MFC的控制台应用程序。 IDE为我创建了以下文件。
我在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;
}
答案 0 :(得分:5)
这个链接必须给你一些线索。 Purpose of stdafx.h
之前定义的行
编译器会忽略#include "stdafx.h"
。因此,如果您想要实际包含这些文件,则需要在#include "stdafx.h".
希望很清楚。
答案 1 :(得分:1)
除了ckv的答案之外,在“stdafx.h”之前包含头文件是没有意义的,因为任何非平凡的头文件都将包含那里包含的框架类型(例如任何MFC类型)。