web-dev-qa-db-ja.com

エラー:プログラム内の「\ XXX」の迷い:なぜですか?

私はC++で小さなプログラムを書いていますが、奇妙なエラーに遭遇しました:

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によって非表示にされている一部の文字によって引き起こされているようです!

質問はこれらのエラーの原因について。

13
Geoffroy

"\302\240"U+00A0 NO-BREAK SPACEのUTF-8です。 Vimは通常、特別なものとして強調表示しないため、'list'モードが有効になっている場合でも、侵入する可能性があります。

あなたはそれらを強調することができます:

:set listchars+=nbsp:.

またはあなたが好きな任意の文字。

23
Josh Lee

前述のように、ソースに表示されない文字があるためです。これに対する優れた解決策の1つは、ファイルを8進数モードで編集することです。これにより、次の文字を「見る」ことができます。

od -c MyClass.hpp

次に、8進数のフローで「見知らぬ人」を見ることができます。

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   /

太字のこの2文字は、次のようなメッセージの原因です。

error: stray ‘\302’ in program 

その後、それらを削除して再構築できます。

よろしく。

8
Régis KLA

同じ問題があり、それは各行の前のスペースの文字エンコーディングでした。これは、ExchangeサーバーおよびiCloudと同期されたノートプログラムからコピーしたために発生しました。私がする必要があるのは、メモ帳を使用してすべての奇妙なスペースを通常のスペースに置き換え、すべてを通常どおりにコンパイルすることです。

0
Salem Elnahwy

私にとって、この問題はWebブラウザからコードをコピーすることで発生しました。

vim:%s/ / /gを実行して、すべてのスペースを実スペースに置き換えようとしましたが、失敗しました。

このエラーを報告しているすべての行の先頭の空白を削除し、スペース文字を再度挿入しました。これは労働集約的ですが、私が見つけた唯一の解決策のようです。

0
Andrew Clemence