Problemas de inlining da função
Se você estiver usando a função que inlining, você deve:
Tem as funções embutidas implementadas no arquivo de cabeçalho que você inclui.
Tem inlining 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"); }
Em seguida, e
// 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 do compilador de #pragma inline_depth , certifique-se de ter um valor de 2 ou maior cluster. Um valor de zero desabilitará inlining. Também verifique se você está usando as opções do compilador de /Ob1 ou de /Ob2 .
Misturar embutido e não embutida cria opções em módulos diferentes às vezes pode causar problemas. Se a biblioteca criando c é criada com a função que inlining (/Ob1 ativado ou /Ob2) mas o arquivo de cabeçalho correspondente que descreve as funções tem nenhuma inlining desativado (padrão), você obterá o erro LNK2001. As funções não obtêm será embutida em código do arquivo de cabeçalho, mas desde que não estão no arquivo de biblioteca não há nenhum endereço para resolver a referência.
De forma similar, um projeto que a função do que inlining porém define as funções em um arquivo .cpp em vez de no arquivo de cabeçalho também obterá LNK2019. O arquivo de cabeçalho for incluído em todos lugares julgou apropriado, mas as funções será embutida somente quando o arquivo .cpp passa pelo compilador; em virtude disso, o vinculador consulte as funções como externals não resolvidos quando usado em outros módulos.
// LNK2019_FIP.h
struct testclass {
void PublicStatMemFunc1(void);
};
em seguida, e
// LNK2019_FIP.cpp
// compile with: /c
#include "LNK2019_FIP.h"
inline void testclass::PublicStatMemFunc1(void) {}
em seguida, e
// 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();
}