Không tương thích nhị phân, truy cập một thành viên hoặc thậm chí tệ hơn, gọi một chức năng của lớp sai:
#pragma once
//include1.h:
#ifndef classw
#define classw
class class_w
{
public: int a, b;
};
#endif
Một hàm sử dụng nó, và nó là ok:
//functions.cpp
#include <include1.h>
void smartFunction(class_w& x){x.b = 2;}
Đưa vào một phiên bản khác của lớp:
#pragma once
//include2.h:
#ifndef classw
#define classw
class class_w
{
public: int a;
};
#endif
Sử dụng các hàm trong main, định nghĩa thứ hai thay đổi định nghĩa lớp. Nó dẫn đến sự không tương thích nhị phân và đơn giản là sự cố khi chạy. Và khắc phục sự cố bằng cách xóa phần đầu tiên bao gồm trong 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;
}
Không có biến thể nào tạo ra lỗi thời gian biên dịch hoặc liên kết.
Tình huống ngược lại, thêm một bao gồm sửa lỗi sự cố:
//main.cpp
//#include <include1.h> //<-- Add this include to fix the crash
#include <include2.h>
...
Những tình huống này thậm chí còn khó khăn hơn nhiều khi sửa lỗi trong một phiên bản cũ của chương trình, hoặc sử dụng một thư viện / dll / đối tượng chia sẻ bên ngoài. Đó là lý do tại sao đôi khi phải tuân theo các quy tắc tương thích ngược nhị phân.