2012-07-10 94 views
7

我最近從Eclipse 3.6更改爲Eclipse 3.7,我在Ubuntu 11.04中用於C++開發。Eclipse 3.7無法解析C++編輯器中的類型

隨着版本3.6我沒有大的麻煩,除了我總是有​​索引器的一些問題。 現在版本3.7開始將未解決的類型標記爲錯誤。由於索引器似乎更不喜歡我,我的Eclipse顯然不知道uint16_tsize_t類型。

與代碼編輯器中顯示的錯誤相反,我的編譯器在編譯代碼和解析所有符號和類型時沒有問題,所以這似乎是IDE本身的問題。

有沒有什麼辦法可以避免這種行爲,因爲所有的紅色下劃線都會讓我的代碼越來越難讀......?

更新:

好了一些研究,從丹尼斯的答案,我發現我需要添加一些路徑 Project Properties/ C/C++ General/ Paths and Symbols

因爲我建立了一個PowerPC代替I32目標,我不能只添加/usr/include。 相反,我需要添加

/usr/powerpc-linux-gnu/libc/usr/include

所有的標準頭(如stdint.h)。 此外,我需要:

/usr/lib/gcc/powerpc-linux-gnu/4.5.1/include

stdarg.h

現在幾乎所有的錯誤都消失了。仍然困擾我的唯一功能是從標頭stdio.hprintf。我查了一下,頭文件本身位於包含的路徑中。我仍然收到一個錯誤,說Function printf could not be resolved。我想再次注意到,這些只是Eclipse顯示的錯誤 - 編譯本身工作正常。

所以實際上拋出了3個問題:

  1. 在項目屬性的Paths and Symbols部分凝聚與包括路徑出C++ Build/Settings/C++ Includes節。這意味着在其中一個部分中添加/刪除路徑直接影響其他部分的輸入。由於C++ Includes與編譯器直接相關,我想知道爲什麼編譯器可以編譯正確(並找到頭文件),即使它們沒有傳遞給他作爲路徑?有沒有某種GCC使用的標準路徑,我不知道?

  2. 爲什麼他在eclipse中找不到printf?包含頭文件stdio.h,它還包含printf的聲明 - 那麼爲什麼Eclipse代碼編輯器告訴我它無法解決它?

  3. 爲什麼頭文件分了這麼多?我意識到,如果我正在構建另一個traget(例如PowerPC),我需要其他頭文件 - 但爲什麼GNU GCC會將這些頭文件分隔到不同的dirs中?

回答

3

常見類型的紅色下劃線通常是由於在包含路徑中沒有標準庫引起的。看看你的項目包括...他們在項目屬性。確保您的C++包含與您正在使用的編譯器相匹配的C++標準庫文件夾的條目。

+0

我正在使用powerpc-linux-gnu-g ++編譯器。在我的C++ Build Settings中,我還配置了相應的include路徑('/ usr/powerpc-linux-gnu/include/C++/4.5.1')。此路徑我也添加到項目包含路徑...不幸的是,沒有任何更改.. – Toby 2012-07-10 15:03:42

+0

'size_t'在''中定義。如果你在你的文件中包含它,看看它是否會使紅線消失。如果不是,請看'#include '是否用黃線加下劃線。如果這樣懸停在它上面,並且如果它說它找不到它,那麼你的包含設置有問題。 另請嘗試重新構建項目的索引。 – Dennis 2012-07-10 15:23:51

+0

嗨丹尼斯,謝謝你的輸入 - 我剛剛更新了一下這個問題。也許你可以進一步幫助我。 – Toby 2012-07-11 12:24:18

3

在點擊這個問題並搜索後發現兩個堆棧溢出問題觸發了相同的問題後,我想我會提交我如何修復它後,它讓我惱火,足以進行實際調查。

我正在運行Fedora,令人討厭的是,它在/ usr/include/linux中有一個stddef.h文件,它實際上是空的。所以,即使我在include路徑中有編譯器的stddef.h,索引器實際上是解析這個其他空文件。那麼什麼需要的所作所爲是:

前綴你的路徑和符號列表與特定的編譯器包含路徑(在我的情況下,它是/usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/)以避免解析其他空的stddef.h。

+0

前綴很重要。我有/usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/包括但是它在底部,不能向上移動。我不得不添加另一個條目並將其移動到頂部以使其工作。顯然,列表中的其他目錄有一個錯誤的版本,這使得事情搞砸了。 – fchen 2013-12-11 13:04:20

0

我正在使用帶有ARM編譯器(arm-none-eabi,4.4.1)的Eclipse(Mars.1 Release 4.5.1,Build id:20150924-1200)。 我和你有完全一樣的問題。 我以前的路徑是:

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include 

然後,我發現了另一個include目錄(後綴: '固定')在編譯器目錄:

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include-fixed 

這個固定我的所有關於類型錯誤檢測的錯誤(例如uint16_t)。

相關問題