我正在使用大型控制台应用程序。该解决方案包含5个项目。 我正在添加第6个项目来替换其中一个现有项目以允许使用GUI。
我收到很多关于类型重新定义的编译器C2011错误。特别是,它们是'struct' type redefinitions
或'[function]: redefinition; different linkage
。它们来自头文件ws2def.h
和winsock2.h
。
我一直在搜索整个项目以及包含这些内容的整个解决方案,但我没有看到任何#include <ws2def.h>
或#include <winsock2.h>
语句,也没有任何表明它们被使用的内容。< / p>
但是,我正在替换的项目和我的新项目中都包含External Dependencies
个文件夹/过滤器。这些过滤器中都存在ws2def.h
和WinSock2.h
。我不认为在一个解决方案下将相同的文件包含在单独的项目中会导致这些问题。另外,在构建我的新项目时,我遇到了这些错误,这意味着它无论如何都不应该看到旧项目。
根据我提供的信息,你能看到我的问题所在吗?如果这些头文件必须在项目中的某个地方#included
,我只是没有看到它?我考虑过删除External Dependencies
过滤器中的两个头文件,因为我似乎不需要它们。是否有一个不同的常见头文件,其中还包含这些头文件,以便它们不会显示在CTRL-Find
中?
谢谢。
答案 0 :(得分:0)
这个问题似乎主要基于原始大型项目的可怕文件结构。 尝试在解决方案中创建一个新项目,将另一个项目复制为GUI而不是Console项目,这意味着项目的编译会使许多文件翻倍。
我发现另一篇文章(现在找不到)表明当Visual Studio解决方案编译时,所有项目文件都被合并,就像{{1}中的所有#include
语句一样文件实际上只是将所有这些文件复制到.c/.cpp/.h
个文件中。
我的解决方案是创建大型项目的副本(用于备份目的),并在复制的项目中删除原始的Console项目并仅包含UI项目。文件不再加倍,因为它们不再存在于两个项目中,只是解决方案中仍然存在的文件。