2012-02-18 27 views
12

Tôi đã xác định hàm show() như được nêu trong tệp tiêu đề có tên ex.h và định nghĩa hàm bên trong ex.cpp. Tôi hy vọng rằng điều này sẽ cho tôi một lỗi kể từ khi trình biên dịch sẽ không biết những gì để thay thế nơi các chức năng show() được gọi là. Nhưng bởi vì tôi đang sử dụng một IDE, nó hoạt động tốt. Làm sao điều này xảy ra được?Phải định nghĩa một hàm nội tuyến C++ trong cùng một tệp?

Và BTW khi tôi cố gắng biên dịch theo cách thủ công, nó đã cho tôi lỗi rằng show() được sử dụng nhưng không được xác định.

Trả lời

21

Điều bắt buộc là định nghĩa của hàm (phần giữa {...}) được đặt trong tệp tiêu đề, trừ khi hàm chỉ được sử dụng trong một tệp .cpp.
Cụ thể, nếu bạn đặt định nghĩa của hàm nội tuyến thành tệp .cpp và bạn gọi nó từ một số tệp .cpp khác, bạn sẽ nhận được lỗi "unresolved external" từ trình liên kết.

[read more]

4

Thông thường, toàn bộ hàm nội tuyến sống trong .h Lý do là trình biên dịch phải xem toàn bộ định nghĩa nội tuyến phía trước. Các chức năng nội tuyến được biên dịch bằng cách trực tiếp 'dán' ngôn ngữ máy phát ra.

6

Chúng ta thường đặt các chức năng nội tuyến trong file header, vì vậy trình biên dịch có thể xem định nghĩa khi biên dịch mã có sử dụng hàm. Bằng cách đó, nó hoạt động với tất cả các trình biên dịch.

Một số trình biên dịch có các tính năng để tối ưu hóa toàn bộ chương trình cùng một lúc (Whole program optimization hoặc Link time optimization). Các trình biên dịch này có thể nội tuyến một hàm ngay cả khi nó được định nghĩa trong một tệp .cpp khác.

Các vấn đề liên quan