(C ++ y gcc) error: constructor esperado, destructor o conversión de tipo antes de 'en línea'

StackOverflow https://stackoverflow.com/questions/1227842

  •  22-07-2019
  •  | 
  •  

Pregunta

Tengo un archivo de encabezado con algunos métodos de plantilla en línea. Le agregué una declaración de clase (solo un par de métodos estáticos ... es más un espacio de nombres que una clase), y comencé a recibir este error de compilación, en un archivo que usa esa nueva clase.

Hay varios otros archivos que incluyen el mismo archivo .h que aún se compilan sin quejas.

Buscar en Google el error me da un montón de enlaces a listas de correo sobre errores en proyectos que tienen un mensaje de error similar (la única diferencia parece ser lo que se supone que precede al constructor, destructor o conversión de tipo).

Estoy a punto de comenzar a quitar todo lo demás hasta que tenga una muestra mínima básica para poder hacer la pregunta de manera inteligente, pero pensé que primero intentaría hacerlo de la manera estúpida:

¿Alguien puede darme una pista básica sobre lo que realmente significa este mensaje de error para que pueda comenzar a rastrearlo / googlearlo?

Solo por razones de integridad, el primer ejemplo de dónde estoy viendo esto se parece más o menos a

namespace Utilities
{
   template <typename T> GLfloat inline NormalizeHorizontally(T x)
   {
      GLfloat scaledUp = x*2.0;
      GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
      return result;
   }
}
¿Fue útil?

Solución

Significa que pones el " en línea " palabra clave en el lugar equivocado. Debe ir antes del tipo de retorno del método, por ejemplo,

 template <typename T> inline GLfloat  NormalizeHorizontally(T x)

Simple como eso.

La razón por la que recibió este mensaje en una unidad de compilación y no en otras puede deberse a que es una función con plantilla que no se instanciaba desde esas otras unidades de compilación.

Generalmente, si obtiene un "bla esperado bla antes del foobar" error, este es un error de análisis y, a menudo, indica un error de sintaxis simple, como un punto y coma faltante, una llave faltante o palabras clave mal ordenadas. El problema generalmente está en algún lugar alrededor de la porción mencionada, pero en realidad podría haber pasado un tiempo atrás, por lo que a veces hay que buscarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top