Ketidakcocokan biner, mengakses anggota atau bahkan lebih buruk, memanggil fungsi dari kelas yang salah:
#pragma once
//include1.h:
#ifndef classw
#define classw
class class_w
{
public: int a, b;
};
#endif
Sebuah fungsi menggunakannya, dan tidak apa-apa:
//functions.cpp
#include <include1.h>
void smartFunction(class_w& x){x.b = 2;}
Membawa versi lain dari kelas:
#pragma once
//include2.h:
#ifndef classw
#define classw
class class_w
{
public: int a;
};
#endif
Menggunakan fungsi di main, definisi kedua mengubah definisi kelas. Ini menyebabkan ketidakcocokan biner dan hanya crash saat runtime. Dan perbaiki masalah dengan menghapus menyertakan pertama di main.cpp:
//main.cpp
#include <include2.h> //<-- Remove this to fix the crash
#include <include1.h>
void smartFunction(class_w& x);
int main()
{
class_w w;
smartFunction(w);
return 0;
}
Tidak ada varian yang menghasilkan kesalahan waktu kompilasi atau tautan.
Situasi sebaliknya, menambahkan sertakan perbaikan kerusakan:
//main.cpp
//#include <include1.h> //<-- Add this include to fix the crash
#include <include2.h>
...
Situasi ini bahkan jauh lebih sulit ketika memperbaiki bug di versi program lama, atau menggunakan perpustakaan eksternal / dll / objek bersama. Itu sebabnya kadang-kadang harus diikuti aturan kompatibilitas mundur biner.