2011-10-05 11 views
13

Estoy escribiendo un pequeño programa en C++, y nos hemos encontrado un error extraño:error: extraviado ' XXX' en el programa: ¿Por qué?

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

estoy escribiendo este programa en vim y la línea correspondiente (mostrando personajes ocultos) es:

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

Esta pregunta no es para resolver este error, ya que solo tengo que copiar la línea y desaparecer la causa del error.

Parece que el error es causado por algunos caracteres incluso ocultos por vim después de activar todas las opciones relativas.

La pregunta es sobre qué pudo haber causado esos errores.

+0

¿Por qué no publicas el código real? – Nawaz

+0

Es el código real. ¿Quieres todo el alcance? No pensé que fuera útil, pero si es necesario, puedo hacerlo. – Geoffroy

+0

¿Qué? El código real contiene '> ---> ---'? y '$' al final? – Nawaz

Respuesta

23

"\302\240" es UTF-8 para U+00A0 NO-BREAK SPACE. Vim normalmente no lo resaltará como algo especial, por lo que es posible que alguien se cuele incluso si tiene habilitado el modo 'list'.

Puede resaltar con:

:set listchars+=nbsp:. 

o cualquier carácter que desee.

+0

Gracias, pero ¿por qué este personaje está en mi código? Solo lo edito con vim y nada más, así que no sé de dónde puede provenir:/ – Geoffroy

+2

@Geoffroy ¿está seguro de que no copió y pegó ningún código de una página web o una página de manual o algo así? – hobbs

+0

Sí, lo escribí yo mismo – Geoffroy

0

Para mí, este problema vino de copiar mi código desde un navegador web.

Intenté hacer un :%s///g en vim para reemplazar todos los espacios con espacios reales, pero esto ha fallado.

Eliminé el espacio en blanco inicial de todas las líneas que informaron este error e inserté los caracteres de espacio nuevamente. Esto requiere mucha mano de obra, pero parece ser la única solución que pude encontrar.

+1

Si el parásito es '\ 302', puede usar':% s, \% o302,, g' – xoolive

0

Tuve el mismo problema y fue la codificación de caracteres de los espacios antes de cada línea. Esto sucedió debido a la copia de programas de notas que se sincronizó con el servidor de Exchange & iCloud. Todo lo que tenía que hacer era aplicar un bloc de notas de reemplazo a todos los espacios extraños con los normales y todo lo compilado normalmente otra vez.

8

Como se mencionó anteriormente es debido a algunos caracteres no visibles en su fuente. Una gran solución para esto es editar el archivo en el modo octal y usted será capaz de "ver" estos personajes:

od -c MyClass.hpp 

A continuación se puede ver en el octal flujo de los "extraños":

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 /

Estos dos caracteres en negrita son la causa de mensajes como

error: stray ‘\302’ in program 

luego, puede eliminarlos, y reconstruir.

Atentamente.

+1

+1 para su solución, bien explicado e incluso funciona para cualquier otro carácter;) – Geoffroy

+1

Esto fue un salvavidas ! –

Cuestiones relacionadas