Подтвердить что ты не робот

Ошибка: отклонение '\ 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 после активации всех относительных параметров!

Вопрос о том, что могло вызвать эти ошибки.

4b9b3361

Ответ 1

"\302\240" - UTF-8 для U+00A0 NO-BREAK SPACE. Vim обычно не выделяет его как нечто особенное, поэтому его можно прокрасть, даже если у вас включен режим 'list'.

Вы можете выделить их с помощью

:set listchars+=nbsp:.

или любой символ, который вам нравится.

Ответ 2

Как уже упоминалось, это связано с некоторыми видимыми символами в вашем источнике. Одним из замечательных решений для этого является редактирование файла в восьмеричном режиме, и вы сможете "видеть" эти символы:

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 

Затем вы можете удалить их и перестроить.

С уважением.

Ответ 3

Для меня эта проблема возникла при копировании моего кода из веб-браузера.

Я попытался сделать :%s/ / /g в vim, чтобы заменить все пробелы на реальные пробелы, но это не удалось.

Я удалил ведущие пробелы всех строк, сообщающих об этой ошибке, и снова вставил символы пробела. Это трудоемкий процесс, но это единственное решение, которое я мог бы найти.

Ответ 4

У меня была такая же проблема, и это была кодировка символов для пробелов перед каждой строкой. Это произошло из-за копирования из заметок, которые были синхронизированы с сервером Exchange и iCloud. Все, что мне нужно было сделать, это применить замену всех, используя блокнот, ко всем странным пространствам с нормальными, и все снова скомпилировано нормально.