Bagikan melalui


Masalah Inlining Fungsi

Jika Anda menggunakan inlining fungsi, Anda harus:

  • Menerapkan fungsi sebaris dalam file header yang Anda sertakan.

  • Telah mengaktifkan inlining di file header.

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

Kemudian,

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

Jika Anda menggunakan direktif #pragma inline_depth kompilator, pastikan Anda memiliki nilai 2 atau set yang lebih besar. Nilai nol akan menonaktifkan inlining. Pastikan juga Anda menggunakan opsi pengkompilasi /Ob1 atau /Ob2 .

Mencampur opsi kompilasi sebaris dan non-sebaris pada modul yang berbeda terkadang dapat menyebabkan masalah. Jika pustaka C++ dibuat dengan inlining fungsi diaktifkan (/Ob1 atau /Ob2) tetapi file header yang sesuai yang menjelaskan fungsi telah inlining dimatikan (tidak ada opsi), Anda akan mendapatkan kesalahan LNK2001. Fungsi tidak di-inlin ke dalam kode dari file header, tetapi karena tidak ada dalam file pustaka, tidak ada alamat untuk menyelesaikan referensi.

Demikian pula, proyek yang menggunakan inlining fungsi namun menentukan fungsi dalam file .cpp daripada di file header juga akan mendapatkan LNK2019. File header disertakan di mana-mana dianggap sesuai, tetapi fungsi hanya sebaris ketika file .cpp melewati pengkompilasi; oleh karena itu, linker melihat fungsi sebagai eksternal yang tidak terselesaikan saat digunakan dalam modul lain.

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

lalu

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

lalu

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

Lihat juga

LNK2019 Kesalahan Alat Linker