在Visual Studio 2013构建中包含来自Microsoft ATL库的atlwin.h时,会导致许多关于未定义元素的编译器错误。
即
#include <atlwin.h>
class MainWnd : public CWindowImpl<MainWnd>
{};
“CWindowImpl:未定义基类”错误。
或
未定义HMONITOR
使用VS2010构建时不会发生这种情况。
我该如何解决?
答案 0 :(得分:7)
问题在于stdafx.h文件中的目标Windows版本
来自MSDN
Visual C ++不再支持Windows 95,Windows 98, Windows ME或Windows NT。如果您的WINVER或_WIN32_WINNT宏是 分配给其中一个版本的Windows,您必须修改 宏。升级使用a创建的项目时 在早期版本的Visual C ++中,您可能会看到相关的编译错误 如果它们被分配给版本,则为WINVER或_WIN32_WINNT宏 不再支持的Windows。
所以,改变
#ifndef WINVER
#define WINVER 0x0400
#endif
到
#ifndef WINVER
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#endif
纠正构建问题
答案 1 :(得分:4)
CWindowImpl
在<atlwin.h>
中定义,因此您需要包含该内容。我不知道您所包含的文件atldwin.h
是什么,但显然它不包含该类。
编辑:根据CCondron下面的评论,这是由于Visual C ++不再支持Windows的目标版本。要修复,请添加:
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500