fatal error C1189: #error : WINDOWS.H already included
问题描述:当你的项目是MFC程序,并包含某些自己写的头文件时,一定遇到过如下错误:fatal error C1189: #error :WINDOWS.H already included.MFC apps must not #include <windows.h>当你第一次遇到这个编译问题时,大家都会觉得非常奇怪,怎么会出现这么奇葩的编译错误;我已经遇到过好几次,直...
·
问题描述:
当你的项目是MFC程序,并包含某些自己写的头文件时,一定遇到过如下错误:
fatal error C1189: #error : WINDOWS.H already included.
MFC apps must not #include <windows.h>
当你第一次遇到这个编译问题时,大家都会觉得非常奇怪,怎么会出现这么奇葩的编译错误;我已经遇到过好几次,直接最近一次才明白其中的原因。
根据原因是在#include stdafx.h文件之前,你直接或间接包括了windows.h导致的,而在stdafx.h文件中间接包含afxv_w32.h头文件。
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
问题分析:
Windows.h文件部分内容如下:
#ifndef _WINDOWS_
#define _WINDOWS_
afxv_w32.h部分文件内容如下:
#pragma once
#ifdef _WINDOWS_
#error WINDOWS.H already included. MFC apps must not #include <windows.h>
#endif
因为Windows.h文件中没有定义_WINDOWS_
则定义_WINDOWS_
宏,而在afxv_w32.h文件中检测到定义了_WINDOWS_
则打印错误信息,这个信息就是编译器编译错误信息。
验证问题:
当我们在MFC工程属性中添加_WINDOWS_
宏定义,也可以出现相同的错误。
问题解决,bingo!!!
更多推荐
所有评论(0)