我正在用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隐藏的某些字符引起的!
问题关于可能导致这些错误的原因。
答案 0 :(得分:23)
"\302\240"
是U+00A0 NO-BREAK SPACE
的UTF-8。 Vim通常不会将其突出显示为任何特殊内容,因此即使您启用了'list'
模式,也可以潜入其中。
您可以使用以下方式突出显示它们:
:set listchars+=nbsp:.
或任何你喜欢的角色。
答案 1 :(得分: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
然后您可以删除它们并重建。
问候。
答案 2 :(得分:0)
对我来说,这个问题来自于从网络浏览器复制我的代码。
我尝试在:%s/ / /g
中执行vim
以使用实空格替换所有空格但这已失败。
我删除了报告此错误的所有行的前导空格,并再次插入了空格字符。这是劳动密集型的,但似乎是我能找到的唯一解决方案。
答案 3 :(得分:0)
我有同样的问题,它是每行前面的空格的字符编码。这是因为从与Exchange服务器和放大器同步的备注程序中复制而发生的。 iCloud中。我需要做的就是将所有使用记事本的替换全部应用到所有奇怪的空间,并且正常编译,然后再次正常编译。