c++ - 包括 stdafx.h winsock2 重新定义错误

标签 c++ visual-c++ visual-c++-6 include

当我包含 winsock2.h 时,我遇到了大约 60 个重新定义错误。我四处寻找了一下,发现了一些建议,包括 winsock2.h b4,包括 windows.h。我这样做了,并且清除了错误。我的问题和疑问正是我应该如何去做这件事。我没有明确包含 windows.h,它是在 stdafx.h 或 stdafx.cpp 中为我完成的。

我在 stdafx.h 中立即添加了 include winsock2.h b4 include Windows.h。这是解决此问题的正确方法还是有更好的方法?

根据 program_name.rc 中的评论判断,我收集到 stdafx.h 中包含的 windows.h 可能由于某些选项或配置参数而被放置在那里,但我无法找到此引用。有什么方法可以指定 stdafx.h 中包含哪些文件?

顺便说一句,WIN32_LEAN_AND_MEAN 是在 stdafx.h 中调用 windows.h 的 b4 定义的。

我正在使用 Visual c++ 6.0 和“Windows Server 2003 PSDK”该程序是直接的 c++,没有 mfc,没有网络,只是普通的 Vanilla 。

最佳答案

您几乎可以将任何您想要的内容放入 stdafx.h。在 windows.h 之前为 winsock2.h 添加 #include 肯定没问题。我将移动 WIN32_LEAN_AND_MEAN header ,以便在您包含任何其他 header 之前对其进行定义:

#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>

stdafx.h 是预编译 header 的可怕名称。我不知道为什么 Visual Studio 仍然将它用于所有自动生成的项目。它给预编译的头文件带来了不应有的神秘气氛。在我的项目中,我通常将预编译头文件设置为使用“precompiled.h”和“precompiled.cpp”。

Noel Llopis 有一篇关于预编译 header 的精彩文章 - ' The Care and Feeding of Precompiled Headers ' 如果您想了解更多关于这里发生的事情的背景信息。

关于c++ - 包括 stdafx.h winsock2 重新定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1988883/

相关文章:

visual-c++ - 使用 libavcodec 对视频帧进行编码

c++ - 从旧的 Borland C++ 迁移到 Visual C++ Express

c++ - MPI_Waitall 实际上是如何工作的

c++ - 作业/任务消耗队列,自删除项目的有效案例?

c++ - G++ 4.9 - 模块范围内的函数没有被调用?

c++ - 有什么方法可以使用 ASYNC MessageBox 吗?

c++ - 如何找出 MSVC 为预处理器宏使用的值

c++ - .NET 异常处理程序在 Visual C++ 6.0 异常中导致堆栈溢出

c++ - 即使系统暂停 C++ 也会闪烁结果

c# - 从 c++ DLL 和 c# 中释放 SAFEARRAY