在 stdafx.h 中声明 <afxdb.h> 时出错
Posted
技术标签:
【中文标题】在 stdafx.h 中声明 <afxdb.h> 时出错【英文标题】:error in declaring <afxdb.h> inside stdafx.h 【发布时间】:2012-02-06 09:43:45 【问题描述】:我正在尝试使用 CDatabase,为此我在 stdafx.h 文件中声明了 <afxdb.h>
。
当我编译此代码时,我收到错误“WINDOWS.H 已包含。MFC 应用程序不得#include <windows.h>
”。为什么会这样?这不是使用 CDatabase 的正确头文件吗?
这是默认生成的代码...
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
如果我在#include <tchar.h
之后添加#include <afxdb.h>
> 我得到指定的错误。
谢谢
【问题讨论】:
可以给出一些示例代码吗?看起来您尝试多次加载头文件。看看***.com/q/2939368/1141095 也许更有条理?您可以更改您的问题并将代码放在那里。请记住,人们可能只有您提供给他们的信息。 【参考方案1】:只需添加以下几行:
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> <--
#include <afxext.h> <--
#include <afxdb.h> <--
// Windows Header Files:
#include <windows.h>
但由于您之前没有在此项目中使用 MFC,您可能必须将项目属性 -> 常规 -> 使用 MFC 从 Use Standard Windows Libraries
更改为 Use MFC in a Static Library
以便链接器满意并且不会打扰您遇到了未解决的外部符号错误。
希望这会有所帮助;)
【讨论】:
太棒了..这行得通。但是在我声明一个 CDatabase 对象后,我得到了一些奇怪的错误。 1:) 未解析的外部符号 __endthreadex 2:) 未解析的外部符号 __beginthreadex 知道这可能是什么吗? 项目属性->常规->使用MFC:将Use Standard Windows Libraries
改为Use MFC in a Static Library
非常感谢。有用。如果你不介意,你能解释一下这个变化是如何影响它的吗?我是新手
MFC 是一个库,这意味着您可以像使用任何其他库一样使用它。由于包含 afx*.h 标头,您知道 Visual Studio 的接口和 Intellisense,因为它具有这些方法的声明。但如果您不提供有关库文件的信息,它们的实现将不可用。【参考方案2】:
您需要先#include afx-headers。之后你可能仍然#include <windows.h>
,尽管这不是必需的。因此,只需更改包含的顺序即可。
【讨论】:
太棒了..这行得通。但是在我声明一个 CDatabase 对象后,我得到了一些奇怪的错误。 1:) 未解析的外部符号 __endthreadex 2:) 未解析的外部符号 __beginthreadex 知道这可能是什么吗?以上是关于在 stdafx.h 中声明 <afxdb.h> 时出错的主要内容,如果未能解决你的问题,请参考以下文章