Partilhar via


Problemas de inlining da função

Se você estiver usando o embutimento de função, precisará:

  • Ter as funções embutidas implementadas no arquivo de cabeçalho que você incluir.

  • Ter o embutimento ativado no arquivo de cabeçalho.

// 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"); }

Assim,

// 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
}

Se você estiver usando a diretiva #pragma inline_depth do compilador, verifique se você tem um valor de 2 ou maior definido. Um valor zero desativará o embutimento. Verifique também se você está usando as opções do compilador /Ob1 ou /Ob2.

Misturar opções de compilação embutidas e não embutidas em módulos diferentes às vezes pode causar problemas. Se uma biblioteca C++ for criada com o embutimento de função ativado (/Ob1 ou /Ob2), mas o arquivo de cabeçalho correspondente que descreve as funções tiver o embutimento desativado (sem opção), você receberá o erro LNK2001. As funções não são embutidas no código do arquivo de cabeçalho, mas como elas não estão no arquivo de biblioteca, não há endereço para resolver a referência.

Da mesma forma, um projeto que usa embutimento de função mas que define as funções em um arquivo .cpp em vez de no arquivo de cabeçalho também obterá o erro LNK2019. O arquivo de cabeçalho é incluído em todos os lugares considerados apropriados, mas as funções só são embutidas quando o arquivo .cpp passa pelo compilador; portanto, o vinculador vê as funções como externas não resolvidas quando usadas em outros módulos.

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

e, em seguida,

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

e, em seguida,

// 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();
}

Confira também

Erro das ferramentas de vinculador LNK2019