首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:编译翻译单元独立性和旧winsock2.h类型重定义错误

C++:编译翻译单元独立性和旧winsock2.h类型重定义错误
EN

Stack Overflow用户
提问于 2012-09-14 13:30:49
回答 1查看 820关注 0票数 0

据我所知,翻译单位之间在编译阶段没有任何关系。您能解释一下为什么我会有这种奇怪的行为:在一个A.cpp中包含windows.h之后(实际上它不使用套接字api,也不包括winsock2.h),我在编译另一个带有winsock2.hwinsock.h冲突的B.cpp时会出错。这个B.cpp一点也没有改变。提前谢谢。

编辑:这实际上是一个编译而不是链接错误。我已经将msvc编译器置于详细模式中,这里的标题包括树:

代码语言:javascript
复制
2>perfomancemeter.cpp
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\numeric
2>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\iterator
2>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xutility
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\climits
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\yvals.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\sal.h
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtassem.h
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vadefs.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\use_ansi.h
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\limits.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\utility
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\iosfwd
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstdio
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdio.h
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\swprintf.inl
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstring
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\string.h
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cwchar
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\wchar.h
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\wtime.inl
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstddef
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstddef
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stddef.h
2>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdbg.h
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\algorithm
2>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\memory
2>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xmemory
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\cstdlib
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdlib.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\exception
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\eh.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\malloc.h
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\new
2>Note: including file: d:\repos\cbs\billing\common\perfomancemeter.h
2>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\vector
2>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\stdexcept
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstring
2>Note: including file: d:\repos\cbs\billing\common\util.h
2>Note: including file:  d:\repos\cbs\billing\common\framework\include\types/types.h
2>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\string
2>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\istream
2>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\ostream
2>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\ios
2>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocnum
2>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\streambuf
2>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xiosbase
2>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocale
2>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\typeinfo
2>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xdebug
2>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocinfo
2>Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xlocinfo.h
2>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\ctype.h
2>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
2>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\locale.h
2>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\crtdefs.h
1>c:\program files (x86)\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(112) : error C2011: 'fd_set' : 'struct' type redefinition
1>        c:\program files (x86)\microsoft visual studio 8\vc\platformsdk\include\winsock.h(54) : see declaration of 'fd_set'

我以前遇到过这个问题,并且知道#在包含windows头之前定义WIN32_LEAN_AND_MEAN。但为什么会发生在这种情况下呢?

EN

回答 1

Stack Overflow用户

发布于 2012-09-14 14:20:14

H包括winsock。因此,即使您不直接包含和不使用它,它也会被包括在内。#define WIN32_LEAN_AND_MEAN解决了这个问题,因为这迫使只包含必要的标头。

可能性:

  • 您已经以某种方式结束了两次包含winsock /winsock 2:尝试删除winsock直接包含并只包含windows.h
  • 您已经在一个常见的头文件中添加了windows/winsock :检查包含层次结构。为了进行测试,移除常见的标头,并尝试将它们直接包含在源文件中。
  • 打开预编译头了吗?试着关掉它

参考如下:http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/6177f9bc-db75-4317-9904-02ef55b527d0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12425616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档