Đối với những người xem tương lai của câu hỏi này, tôi muốn chỉ ra rằng bạn nên tránh những gì khỉ0506 đang gợi ý .
Các tập tin tiêu đề là để khai báo.
Các tệp tiêu đề được biên dịch một lần cho mỗi .cpptệp trực tiếp hoặc gián tiếp #includeschúng và mã bên ngoài bất kỳ chức năng nào được chạy khi khởi tạo chương trình, trước đó main().
Bằng cách đặt: foo::i = VALUE;vào tiêu đề, foo:isẽ được gán giá trị VALUE(bất kể đó là gì) cho mỗi .cpptệp và các phép gán này sẽ xảy ra theo thứ tự không xác định (được xác định bởi trình liên kết) trước khi main()được chạy.
Điều gì xảy ra nếu chúng ta #define VALUElà một số khác nhau trong một trong các .cpptệp của chúng tôi ? Nó sẽ biên dịch tốt và chúng tôi sẽ không có cách nào để biết ai thắng cho đến khi chúng tôi chạy chương trình.
Không bao giờ đặt mã thực thi vào một tiêu đề cho cùng một lý do mà bạn không bao giờ #includelà một .cpptệp.
bao gồm các trình bảo vệ (mà tôi đồng ý bạn nên luôn luôn sử dụng) bảo vệ bạn khỏi một điều khác biệt: cùng một tiêu đề được gián tiếp #included nhiều lần trong khi biên dịch một .cpptệp duy nhất