Tôi đang cố sử dụng các hàm thành viên nội tuyến của một lớp cụ thể. Ví dụ khai báo hàm và thực hiện mà không cần nội tuyến là như vậy:lỗi liên kết hàm nội tuyến
trong file header:
int GetTplLSize();
trong file cpp:
int NeedleUSsim::GetTplLSize()
{
return sampleDim[1];
}
Đối với một số lý do nếu tôi đặt " nội tuyến "từ khóa trong một trong hai việc thực hiện và khai báo, cũng như ở cả hai nơi, tôi nhận được lỗi liên kết như được hiển thị:
Creating library C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.x and object C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.exp mexfunction.obj : error LNK2019: unresolved external symbol "public: int __thiscall NeedleUSsim::GetTplLSize(void)" ([email protected]@@QAEHXZ) referenced in function _mexFunction mexfunction.mexw32 : fatal error LNK1120: 1 unresolved externals C:\PROGRA~1\MATLAB\R2008B\BIN\MEX.PL: Error: Link of 'mexfunction.mexw32' failed.
Cần phải làm gì để loại bỏ lỗi này (tức là Tôi đang làm gì sai trong việc thực hiện các chức năng thành viên nội tuyến này)?
Đây có phải là cách duy nhất không? (Tôi muốn tách riêng việc khai báo và triển khai một cách riêng biệt vì các lý do dễ đọc) – stanigator
Về cơ bản là có. Trình biên dịch phải biết phần thân của hàm trong khi biên dịch các cuộc gọi đến hàm đó, do đó cơ thể phải nằm trong tệp tiêu đề được bao gồm. Tuy nhiên, bạn vẫn có thể khai báo hàm trong khai báo lớp và thêm việc triển khai thực hiện ở vị trí sau trong tệp tiêu đề. – Hans
Tôi hiểu. Tôi đoán tôi sẽ phải sống bằng cách viết mã theo cách này. Cảm ơn lời khuyên. – stanigator