C ++导入头

时间:2014-02-08 07:33:29

标签: c++ winsock

我有两个项目可以自行编译。

一个项目,包括对另一个项目的引用。

我正在使用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时只收到错误。请帮忙,读这么多,我的脑袋旋转。

2 个答案:

答案 0 :(得分:1)

#include的顺序在WinSock编程中很重要(我相信这是常见问题解答之一。)请参阅此处的讨论:

答案 1 :(得分:0)

重新定义错误意味着发生了这种事情:

struct netent{...};
...
struct netent{...}; // error C2011

当在没有包含两次包含保护的标头中声明该结构时,或者如果您使用同一个库的多个版本,或者无数其他可能性时,就会发生这种情况。

我不熟悉最近的VS编译器,但是如果它们像其他所有现代编译器一样,那么错误消息将告诉您它看到多个定义的两个位置,以及将它放在那里的包含链。这应该可以帮助你缩小问题范围。

BTW,术语“import”在C ++中没有任何意义。您可能意味着“包含”与其他语言中的“导入”具有相同的目的,但它的实现方式在出现问题时会有很大不同。 #include <header.h>实际上会复制/粘贴header.h的内容。