Compartir a través de


Problemas en la inclusión de funciones en línea

Si usa la inserción de funciones, debe:

  • Tener implementadas las funciones insertadas en el archivo de encabezado que incluye.

  • Activar la inserción en el archivo de encabezado.

// LNK2019_function_inline.cpp
// compile with: /c
// post-build command: lib LNK2019_function_inline.obj
#include <stdio.h>
struct _load_config_used {
   void Test();
   void Test2() { printf("in Test2\n"); }
};

void _load_config_used::Test() { printf("in Test\n"); }

Y luego,

// LNK2019_function_inline_2.cpp
// compile with: LNK2019_function_inline.lib
struct _load_config_used {
   void Test();
   void Test2();
};

int main() {
   _load_config_used x;
   x.Test();
   x.Test2();   // LNK2019
}

Si usa la directiva del compilador #pragma inline_depth, asegúrese de tener establecido un valor de 2 o superior. Un valor de cero desactivará la inserción. Asegúrese también de usar las opciones del compilador /Ob1 u /Ob2.

En algunas ocasiones, la combinación de las opciones de compilación insertadas y no insertadas en distintos módulos puede provocar problemas. Si se crea una biblioteca de C++ con la inserción de funciones activada (/Ob1 u /Ob2), pero el archivo de encabezado correspondiente que describe las funciones tiene desactivada la inserción (no la opción), recibirá el error LNK2001. Las funciones no se insertan en el código del archivo de encabezado, pero dado que no están en el archivo de biblioteca, no hay ninguna dirección para resolver la referencia.

Del mismo modo, un proyecto que usa la inserción de funciones, pero define las funciones en un archivo .cpp en lugar de hacerlo en el archivo de encabezado, también recibirá el error LNK2019. El archivo de encabezado se incluye donde corresponde, pero las funciones solo se insertan cuando el archivo .cpp pasa por el compilador; por lo tanto, el enlazador ve las funciones como funciones externas no resueltas cuando se usan en otros módulos.

// LNK2019_FIP.h
struct testclass {
   void PublicStatMemFunc1(void);
};

y, luego,

// LNK2019_FIP.cpp
// compile with: /c
#include "LNK2019_FIP.h"
inline void testclass::PublicStatMemFunc1(void) {}

y, luego,

// LNK2019_FIP_2.cpp
// compile with: LNK2019_FIP.cpp
// LNK2019 expected
#include "LNK2019_FIP.h"
int main() {
   testclass testclsObject;

   // module cannot see the implementation of PublicStatMemFunc1
   testclsObject.PublicStatMemFunc1();
}

Consulte también

Error de las herramientas del vinculador LNK2019