2014-02-08 41 views
-1

我有兩個項目可以自行編譯。C++導入標題

一個項目,包括對另一個項目的引用。

我正在使用Visual Studio 2012.一個項目是VS2010項目,另一個項目是使用VS2012創建的。不確定這是否相關。

無論如何。我得到這個類型的錯誤,當我有「RTSPTestServer」

我會後的代碼,如果是在這裏很重要,但我相信這是某種形式的配置問題。

這兩個項目都是C++ Win32控制檯應用程序。一個有RTSP類,另一個想使用那個類。這兩個項目都可以在C++中自行編譯。

1將RTSP導入包含VisionBase項目的VisionBase解決方案。 2將其他包含目錄添加到VisionBase項目。 3使用RTSP類,在VisionBase中使用Intellisense完成。 4構建解決方案。

在這個階段我得到了錯誤。

錯誤380錯誤C2011: 'netent': '結構' 類型重新定義C:\ Program Files文件(x86)的\的Windows套件\ 8.0 \包含\恩\ Winsock2.h 238 1 VisionBase

我使用的WinSock h和WinSock2.h

雖然我已經搜索谷歌我找不到爲什麼我收到重定義的錯誤。兩個項目都將winsock作爲其各自標準外部庫的一部分。但是,這僅在RTSP項目中引用。當我嘗試導入RTSP時,我只出現錯誤。請幫助,閱讀這麼多,我的頭在旋轉。

回答

0

重新定義錯誤意味着這樣的事情正在發生:

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

時結構的頭都被定義爲不包括隨機配備兩次衛士會發生這種情況,或者如果您正在使用多個版本同一個圖書館或其他無數種可能性。

我對最近的VS編譯器並不熟悉,但是如果它們像其他所有現代編譯器一樣,那麼錯誤消息會告訴你它看到多個定義的兩個地方,以及包含它的鏈。這應該有助於縮小問題的範圍。

BTW,術語 「導入」 在C++中沒有任何意義。你可能意味着「包括」服務於相同的目的,在其他語言中的「進口」,但它的作用顯著不同,當事情出錯的方式來實現。 #include <header.h>實際上將複製/粘貼的header.h內容。