VC++ C2011 重定义错误 - 未使用的头文件

VC++ C2011 redefinition errors - unused header files

本文关键字:未使用 文件 错误 C2011 定义 VC++      更新时间:2023-10-16

我正在使用一个大型控制台应用程序。该解决方案包含 5 个项目。 我正在添加第 6 个项目来替换现有项目之一以允许使用 GUI。

我收到许多关于类型重定义的编译器 C2011 错误。特别是,它们是'struct' type redefinitions'[function]: redefinition; different linkage.它们来自头文件ws2def.hwinsock2.h.

我一直在搜索整个项目和整个解决方案,以查找包含这些内容的位置,但我没有看到任何#include <ws2def.h>#include <winsock2.h>语句,也没有看到任何表明它们已被使用的内容。

但是,我要替换的项目和新项目中都包含External Dependencies文件夹/过滤器。ws2def.hWinSock2.h都存在于这些筛选器中。我不认为在一个解决方案下的单独项目中包含相同的文件会导致这些问题。此外,我在构建新项目时遇到这些错误,这意味着无论如何它都不应该看到旧项目。

根据我提供的信息,您是否能够看到我的问题可能出在哪里?这些头文件是否必须在项目中的某个地方#included而我只是没有看到它?我已经考虑过从External Dependencies过滤器中删除这两个头文件,因为我似乎不需要它们。是否有一个不同的通用头文件也包含这些头文件,以便它们不会出现在CTRL-Find中?

谢谢。

这个问题似乎主要基于原始大型项目的可怕文件结构。 尝试在解决方案中创建新项目以将另一个项目复制为 GUI 而不是控制台项目意味着项目的编译在许多文件上加倍。

我找到了另一篇文章(现在找不到(,其中指出,当Visual Studio解决方案编译时,所有项目文件都会合并,就像.c/.cpp/.h文件中的所有#include语句一样,实际上只是将所有这些文件复制到#included它们的文件中。

我的解决方案是创建大型项目的副本(用于备份(,并在复制的项目中删除原始控制台项目并仅包含 UI 项目。文件不再加倍,因为它们不再存在于两个项目中,只是解决方案中仍然存在的文件。