Variabel atau Isi Fungsi Hilang
Hanya dengan prototipe fungsi, pengkompilasi dapat dilanjutkan tanpa kesalahan, tetapi linker tidak dapat menyelesaikan panggilan ke alamat karena tidak ada kode fungsi atau ruang variabel yang dicadangkan. Anda tidak akan melihat kesalahan ini sampai Anda membuat panggilan ke fungsi yang harus diselesaikan oleh linker.
Contoh: Memanggil ke fungsi yang tidak ditentukan
Panggilan fungsi dalam utama akan menyebabkan LNK2019 karena prototipe memungkinkan pengkompilasi berpikir fungsi ada. Linker menemukan bahwa itu tidak.
// LNK2019_MFBV.cpp
// LNK2019 expected
void DoSomething(void);
int main() {
DoSomething();
}
Contoh: Memanggil ke fungsi yang diimplementasikan
Di C++, pastikan Anda menyertakan implementasi fungsi tertentu untuk kelas dan bukan hanya prototipe dalam definisi kelas. Jika Anda mendefinisikan kelas di luar file header, pastikan untuk menyertakan nama kelas sebelum fungsi (Classname::memberfunction
).
// LNK2019_MFBV_2.cpp
// LNK2019 expected
struct A {
static void Test();
};
// Should be void A::Test() {}
void Test() {}
int main() {
A AObject;
AObject.Test();
}