Pregunta

¿Por qué recibo esta advertencia en Qt Creator: `inline function 'bool Lion :: growl ()' utilizada pero nunca definida?

Verifiqué dos veces mi código y tengo una declaración

en línea bool growl () en Lion ( lion.h )

y la implementación correspondiente en lion.cpp :

en línea bool Lion :: growl ()

¿Qué está pasando?

EDITAR: mi suposición ha sido que es legal definir el método en línea real en el archivo .cpp (la palabra clave inline alerta al compilador para buscar el cuerpo del método en otro lugar), o estoy equivocado?

No quiero saturar mis archivos de encabezado con detalles de implementación.

¿Fue útil?

Solución

Bueno, no sé el problema exacto, pero para empezar:

  • Se supone que los métodos en línea se implementarán en el archivo de encabezado. El compilador necesita conocer el código para realmente alinearlo .
  • También usando el " en línea " La palabra clave en la declaración de clase no tiene ningún efecto. Pero tampoco puede doler.

Consulte también: c ++ faq lite

Otros consejos

  

Se supone que los métodos en línea se implementarán en el archivo de encabezado. los   el compilador necesita conocer el código para realmente incorporarlo.

Excepto si la función en línea se usa en el mismo proyecto, posiblemente en otro archivo que #incluye su encabezado.

Echo de menos que haya una restricción para las bibliotecas porque restringir los encabezados para que funcionen con los prototipos hace que las cosas sean más legibles.

¿Qué pasa con #include -ing el .cpp?

Además de lo que dijo Johan, no puede tener una definición y una declaración separadas para la función, incluso si ambas están en el mismo archivo de encabezado. Esto es cierto especialmente para las funciones miembro de las clases. El código de función debe tener la forma:

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

Y NO de la forma

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top