2013-07-18 33 views
2

添加了我正在使用的庫的include目錄後。 Visual Studio 2010能夠找到包含在我的源代碼中的頭文件(IntelliSense不顯示任何錯誤)。但是,在構建解決方案時,它告訴我它無法找到頭文件。我以前的項目中使用的相同屬性不會發布此問題。雖然包含目錄已被指定,但Visual Studio無法在編譯期間找到頭文件

我現在唯一的解決方案是使用該庫的所有頭文件的直接地址,但是我發現這樣做非常令人煩惱,因爲庫的頭文件彼此交叉引用,並且它不編輯所有這些是有意義的。

有沒有人有任何想法是什麼導致這個問題?

回答

1

這似乎是真正的問題是由於我沒有在項目中添加包含目錄來引用正在實現該庫的項目。 這解釋了爲什麼我可以自己構建被引用的項目,並且在編譯整個解決方案時只有問題。

我覺得這是相當愚蠢的,要求我們重新申報包括在提到的項目目錄,當我們在提到項目

+0

正確非常惱人的錯誤了嗎?。 – tmanthey

1

與編譯器&鏈接器相比,搜索包含文件時,IntelliSense使用稍微不同的算法。特別是,即使include目錄沒有正確指定,它也可以(有時)查找頭文件。

我假設你正確指定了include目錄。

一個想法:如果您指定了一個根路徑(例如\myproject\includes),那麼在Visual Studio 2010中存在一個錯誤,那麼在構建解決方案時,VS將使用它安裝的驅動器(通常是C :)而不是驅動器解決方案所在的位置。如果是這種情況,則必須指定驅動器(例如,D:\myproject\includes)或使用相對路徑(例如,..\..\myproject\includes)。

1

這可能是因爲您在兩個目錄中引用了對方頭文件的源代碼+頭文件。即該文件是

1/a.c 
1/a.h 
2/b.c 
2/b.h 

和AC和BC的內容具有相同的包括

#include "a.h" 
#include "b.h" 

編譯交流時,你的項目可以找到啊,和編譯BC時(因爲同一目錄下,它可以找到BH當您在#include "xxx"中使用雙引號時,在搜索路徑中被假定)。但a.c找不到b.h和b.c默認情況下找不到a.h。您的項目可能位於目錄1中,您可能已設置包含目錄以查看2。這工作正常,直到2/b.c需要包含「a.h」。您需要設置include目錄路徑,以包含1以及2,儘管1是您的原始項目目錄,看起來很愚蠢。

這是智能感知可以打開文件的原因(因爲它是無所不知的),但編譯器不能(因爲它只是一次查看一個文件)。

+0

這是問題已經這樣做了。沒有意識到項目的另一部分已經使用了同一個庫。當你的項目變得太大時,這就是問題所在。 - 」謝謝你的見解 – zen

+0

如果我有正在建設的第一個問題的項目,它不應該有這個問題吧 – zen

相關問題