2011-08-31 44 views
2

我有以下情況。Visual C++ intellisense比編譯器「更聰明」

我有從中類派生的基類。然而,每當我將鼠標光標懸停在基類的繼承成員上時,每一次都顯得很好,智能感知系統顯示它很好,EG BaseClass :: SomeMember。但是,當我嘗試編譯時,編譯器會顯示各種錯誤(它們是關於intellisense報告的變量和成員函數)。編譯器說'它們不是有效的標識符',它們不屬於全局命名空間。有誰知道這是爲什麼發生?

+0

據我所知,他們是兩個獨立的過程,所以它可能在某些情況下,智能感知會加倍努力來幫助你,而編譯器是嚴格 –

+0

你能提供一個代碼示例? –

+1

最近有人討論過這個問題,所以請仔細研究一下 - 前端是由EDG授權的,它提供Intellisensing,但是編譯器是微軟自己的,而且兩者在非常現代的C++特性方面完全不同。 –

回答

8

如果這是VC2010,那麼是的,從某種意義上說是智能感知更聰明。 他們轉而使用EDG的IntelliSense編譯器前端,這是比微軟自己的編譯器更嚴格,更符合標準的編譯器。所以有些情況下IntelliSense和「真實」的編譯器不一致。

有時智能感知是錯誤的,因爲它沒有完整的圖片(它運行在不同的上下文中,並且一次只處理代碼的小片段),有時智能感知是正確的,編譯器是錯誤的(在符合C++標準的條款),因爲EDG的前端在這方面只是更好。

2

不,智能感知絕對不是聰明。您的代碼已損壞。向代碼的相關部分詢問單獨的問題以及獲得的錯誤消息。

1

這取決於你的「聰明」的定義。 Intellisense並不是一個完整的編譯器,但它會內置各種啓發式技術,以幫助處理無效的代碼。如果它沒有這些,那麼它就完全沒用了。

但這些試探最終只是猜測;有時他們會誤導或錯誤的。

+0

相當不幸。 d: – Rhexis