2011-10-05 81 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

这是一个挽救生命! –

相关问题