it-swarm.com.de

fehler: Streuung '\ XXX' im Programm: Warum?

Ich schreibe ein kleines Programm in C++ und stoße auf einen merkwürdigen Fehler:

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

Ich schreibe dieses Programm in vim und die entsprechende Zeile (mit versteckten Zeichen) lautet:

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

Bei dieser Frage geht es nicht um die Behebung dieses Fehlers, da ich nur die Zeile zurückkopieren muss und die Fehlerursache verschwindet.

Es scheint, dass der Fehler durch einige Zeichen verursacht wird, die sogar von vim verborgen wurden, nachdem alle relativen Optionen aktiviert wurden!

Die Frage ist was könnte diese Fehler verursacht haben.

13
Geoffroy

"\302\240" ist UTF-8 für U+00A0 NO-BREAK SPACE. Vim hebt es normalerweise nicht als etwas Besonderes hervor. Es ist also möglich, dass sich jemand einschleicht, selbst wenn der 'list'-Modus aktiviert ist.

Sie können sie hervorheben mit:

:set listchars+=nbsp:.

oder irgendein Zeichen, das du magst.

23
Josh Lee

Wie bereits erwähnt, ist dies auf einige nicht sichtbare Zeichen in Ihrer Quelle zurückzuführen. Eine gute Lösung hierfür ist, Ihre Datei im Oktalmodus zu bearbeiten, und Sie können diese Zeichen "sehen":

od -c MyClass.hpp

Dann können Sie im Oktalfluss die "Fremden" sehen: 

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   /

Diese beiden fett gedruckten Zeichen sind die Ursache für Meldungen wie 

error: stray ‘\302’ in program 

Sie können sie dann entfernen und neu erstellen. 

Grüße.

8
Régis KLA

Ich hatte das gleiche Problem und es war die Zeichenkodierung für die Leerzeichen vor jeder Zeile. Dies geschah aufgrund des Kopierens von mit Exchange-Server und iCloud synchronisierten Notes-Programmen. Alles, was ich tun musste, war, alle merkwürdigen Leerzeichen durch normale zu ersetzen und alles wieder normal zu kompilieren.

0
Salem Elnahwy

Für mich bestand dieses Problem aus dem Kopieren meines Codes aus einem Webbrowser.

Ich habe versucht, einen :%s/ / /g in vim auszuführen, um alle Leerzeichen durch echte Leerzeichen zu ersetzen. Dies ist jedoch fehlgeschlagen.

Ich habe den führenden Leerraum aller Zeilen, die diesen Fehler melden, gelöscht und die Leerzeichen wieder eingefügt. Dies ist arbeitsintensiv, scheint jedoch die einzige Lösung zu sein, die ich finden konnte.

0
Andrew Clemence