2011-10-05 12 views
13

我正在寫在C++一個小程序,並遇到一個奇怪的錯誤:錯誤:程序中出現' XXX':爲什麼?

src/Makefile/Tool.cpp:42:3: error: stray ‘\302’ in program 
src/Makefile/Tool.cpp:42:3: error: stray ‘\240’ in program 

我在寫這程序在vim,相應的線路(表示隱藏字符)是:

>--->---std::vector<std::string> { "--debug" }$ 

這個問題不是關於解決這個錯誤,因爲我只需要複製行和錯誤原因消失。

看來,錯誤是由一些字符引起的,甚至在激活所有相關選項後被vim隱藏起來!

的問題是什麼可能造成這些錯誤。

+0

爲什麼不張貼真實的代碼? – Nawaz

+0

這是真實的代碼。你想要整個範圍?我雖然沒有用,但如果需要,我可以。 – Geoffroy

+0

什麼?真正的代碼包含'> ---> ---'?和'$'在最後? – Nawaz

回答

23

"\302\240"U+00A0 NO-BREAK SPACE UTF-8。 Vim通常不會將其突出顯示爲任何特殊內容,因此即使啓用了'list'模式,也可以潛入其中。

您可以選中它們:

:set listchars+=nbsp:. 

或任何你喜歡的角色。

+0

謝謝,但爲什麼這個字符在我的代碼中?我只是用vim編輯它,沒有其他的東西,所以我不知道它來自哪裏:/ – Geoffroy

+2

@Geoffroy你確定你沒有複製 - 從網頁或聯機幫助頁或任何東西複製粘貼任何代碼? – hobbs

+0

是的,我自己輸入 – Geoffroy

0

對我來說,這個問題來自我的代碼從Web瀏覽器複製。

我試圖vim:%s///g,以取代實際空間的所有空間,但這已經失敗。

我刪除了報告此錯誤的所有行的前導空格,並再次插入空格字符。這是勞動密集型的,但似乎是我能找到的唯一解決方案。

+1

如果流浪是'\ 302',你可以使用':%s,\%o302,g' – xoolive

0

我有同樣的問題,它是每行之前的空格的字符編碼。發生這種情況是由於從Notes服務器& iCloud同步的Notes程序複製而來。我所需要做的就是將全部使用記事本的替換全部應用到所有具有普通內存的奇怪空間,並且所有的事情都會重新編譯。

8

如前所述,這是由於您的源中有一些不可見的字符。這樣做的一個很好的解決方案是編輯文件中的八進制模式,您將能夠「看到」這些字符:

od -c MyClass.hpp 

然後你可以在八進制看到流動的「陌生人」:

0001240 t  s t r i n g &  n a m e  ) 
0001260  { **302 240** t h i s - > n a m e  = 
0001300  n a m e ;  } \n \n \n \t \t \t \t /

粗體這兩個字符的消息像

error: stray ‘\302’ in program 

然後,您可以將其刪除,並重建事業。

問候。

+1

+1爲你的解決方案,很好的解釋,甚至適用於任何其他角色;) – Geoffroy

+1

這是一個挽救生命! –