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

VC++ C2011 redefinition errors - unused header files

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

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

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

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

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

谢谢。

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

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

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