2012-01-26 248 views
3

VS 2010中出現了一個奇怪的Intellisense錯誤。我搜索了互聯網,但沒有運氣。似乎沒有其他人之前得到過這個錯誤。Visual Studio 2010 C++智能感知錯誤

IntelliSense: PCH warning: header stop needs to be at global scope. 
An intellisense PCH file was not generated. 

因爲它停止索引,所以出現許多其他錯誤。這發生在我添加的最近的文件中。我的項目中有很多文件(278),最近的這些文件發生在其中的5-6個。可能是我做了一些不喜歡的事情,或者可能是有限制的。

因爲即使在文檔中我也找不到這個錯誤,所以我想知道原因以及可能的解決方案。請注意,我試圖刪除ipch文件夾和sdf文件以使它們生成新的文件。錯誤被賦予文件的最後一行。我的代碼大量使用模板。

編輯:
我注意到我的ipch文件夾大部分是空的。這可能意味着整個預編譯頭文件生成失敗,而不是這些文件。儘管如此,intellisense部分工作,但不適用於這些文件。

+0

我使用VS 2008,這可能是不同的,但對我來說,Intellisense數據庫存儲在NCB文件中。刪除通常可以修復我的Intellisense問題。 – Travesty3

+0

他們使用VS2010改變了整個系統,現在它依賴於預編譯頭文件並使用mssql數據庫來存儲條目。通常情況下,ipch文件夾佔用了100MB,現在幾乎空了。 –

+1

可能是相關http://social.msdn.microsoft.com/Forums/en-SG/vsdebug/thread/d41f9aea-4425-48fd-9e3b-4169ffc38e6f – Ha11owed

回答

4

PCH代表「預編譯頭文件」 - 您需要確保您已正確配置了這些文件。

錯誤消息似乎是說,配置爲預編譯頭文件的「停止」的頭文件以嵌套的方式(即,其他頭文件包含它)包含在頭文件中。默認情況下,解決方案將使用stdafx.h作爲「停止」標題,成語是stdafx.h將成爲包含在任何.cpp.c文件中的第一個標題。請勿在其他標題中包含stdafx.h

有關Intellisense如何工作以及如何排除故障的最佳信息來自Visual C++ Team Blog

一些文章可能會有所幫助:

+0

我的項目不使用pch,但智能感知使用它。它爲它創建文件夾,但它完全是空的。 –

+0

可能是我有一個遞歸包括。這值得調查。 Pragma保護以獲得編譯錯誤,但可能intellisense忽略它們。 –

+0

有沒有辦法獲得更多關於智能感知的日誌信息?就像它試圖解析的文件列表一樣。 –

0

我最初的感覺是,它可能是一個文件編碼的問題,但無論如何,這裏是我將如何解決它......

創建一個全新的解決方案,intellisense的工作?如果沒有,那麼VS重新安裝可能是爲了。

如果智能感知在不同的解決方案的工作,然後有2種可能:(?權限也許)東西在你的解決方案是扭曲或東西在你的文件夾結構是扭曲

我會刪除整個解決方案文件夾和從源代碼控制獲取最新信息。

如果在此之後它仍然存在,並且您確實希望找到原因,那麼您可以從項目中刪除大量文件,查看智能感知是否可用,請刪除更多...直到a)用完或者b)找到導致錯誤的文件。

如果a)然後製作一個全新的解決方案,並添加您的文件和項目。如果這樣做的話,然後比較你的新解決方案/項目文件與舊的,看看有什麼不同。

如果b)然後重新添加文件並開始修剪,直到找到違規行。

+0

它在與svn同步的兩臺不同計算機上創建相同的錯誤。所有其他項目都工作得很好。我猜你的蠻力方法需要一些時間(278個文件中有超過40k行代碼)。至少我知道這個問題發生在最後幾個文件之後。值得一試。 –

+0

@Cem:有沒有更新? – demoncodemonkey

+0

我正在探索另一個選項。我已安裝Visual AssistX。我禁用了intellisense。目前看起來確定。一旦我確信它可以100%工作,我可能會立即購買它。 –

3

當您忘記「;」時會生成此錯誤;例如:

#ifndef _MYCLASS_H 
class MyClass { 
... 
public: 
... 
} 

#endif <--- VS2010 report here the error PCH: warning... 

如果您將一個「;」在關閉「}」之後,錯誤消失。我不是說這是唯一的原因,我只是說我發現那個失蹤的錯誤「;」在提到的地方。