NB Đây không phải là câu hỏi về cách sử dụng các hàm nội tuyến hoặc cách chúng hoạt động, mà là lý do tại sao chúng được thực hiện theo cách của chúng.
Việc khai báo một hàm thành viên lớp không cần phải định nghĩa một hàm như thế nào inline
, nó chỉ là việc triển khai thực tế của hàm. Ví dụ, trong tệp tiêu đề:
struct foo{
void bar(); // no need to define this as inline
}
Vậy tại sao việc triển khai nội tuyến của một hàm lớp lại phải nằm trong tệp tiêu đề? Tại sao tôi không thể đặt hàm nội tuyến vào .cpp
tệp? Nếu tôi cố gắng đưa định nghĩa nội tuyến vào .cpp
tệp, tôi sẽ gặp lỗi dọc theo các dòng:
error LNK2019: unresolved external symbol
"public: void __thiscall foo::bar(void)"
(?bar@foo@@QAEXXZ) referenced in function _main
1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe
: fatal error LNK1120: 1 unresolved externals
inline
xuất hiện trên một định nghĩa nhưng không phải là một khai báo trước và ngược lại . Nếu vậy, điều này có thể hữu ích: stackoverflow.com/questions/4924912/…