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