C++导入标头

C++ import header

本文关键字:导入 C++      更新时间:2023-10-16

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

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

我正在使用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时才会出现错误。请帮忙,读了这么多关于这个的文章,我都快晕头转向了。

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

  • 在<winsock.h>并且<winsock2.h>

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

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

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

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

顺便说一句,"导入"一词在C++中没有任何意义。你可能指的是"include",它与其他语言中的"import"具有相同的目的,但它的实现方式在出现问题时会有很大不同。#include <header.h>实际上将复制/粘贴header.h的内容。