我有两个项目可以自行编译。
一个项目,包括对另一个项目的引用。
我正在使用Visual Studio 2012.一个项目是VS2010项目,另一个项目是使用VS2012创建的。不确定这是否相关。
反正。当我包含“RTSPTestServer”
时,我遇到了这种类型的错误如果这里的代码很重要,我会发布代码,但我相信这是某种配置问题。
这两个项目都是C ++ Win32控制台应用程序。一个有RTSP类,另一个想要使用该类。这两个项目都可以在C ++中自行编译。
1将RTSP导入VisionBase解决方案,其中包含VisionBase项目。 2向VisionBase项目添加其他包含目录。 3使用RTSP类,在VisionBase中使用Intellisense。 4构建解决方案。
在这个阶段我得到了错误。
错误380错误C2011:'netent':'struct'类型重新定义C:\ Program Files(x86)\ Windows Kits \ 8.0 \ Include \ um \ Winsock2.h 238 1 VisionBase
我正在使用WinSock.h和WinSock2.h
虽然我搜索了谷歌我找不到为什么我得到重新定义错误。这两个项目都将winsock作为其各自标准外部库的一部分。但是,这仅在RTSP项目内部引用。我尝试导入RTSP时只收到错误。请帮忙,读这么多,我的脑袋旋转。
答案 0 :(得分:1)
#include
的顺序在WinSock编程中很重要(我相信这是常见问题解答之一。)请参阅此处的讨论:
答案 1 :(得分:0)
重新定义错误意味着发生了这种事情:
struct netent{...};
...
struct netent{...}; // error C2011
当在没有包含两次包含保护的标头中声明该结构时,或者如果您使用同一个库的多个版本,或者无数其他可能性时,就会发生这种情况。
我不熟悉最近的VS编译器,但是如果它们像其他所有现代编译器一样,那么错误消息将告诉您它看到多个定义的两个位置,以及将它放在那里的包含链。这应该可以帮助你缩小问题范围。
BTW,术语“import”在C ++中没有任何意义。您可能意味着“包含”与其他语言中的“导入”具有相同的目的,但它的实现方式在出现问题时会有很大不同。#include <header.h>
实际上会复制/粘贴header.h
的内容。