01/10/2018, 12:35
Friend function trong C++
Không nhận được hàm friend trong hàm main code:
Maytinh.hpp
friend void Nhapmaytinh(Maytinh* mt);
friend void Xuatmaytinh(Maytinh* mt);
Maytinh.cpp
void Nhapmaytinh(Maytinh* mt)
{
for(int i = 0; i < sizeof(mt); ++i)
{
mt[i].Input();
}
}
void Xuatmaytinh(Maytinh* mt)
{
for(int i = 0; i < sizeof(mt); ++i)
{
mt[i].Output();
}
}
main.cpp
Maytinh mt[1];
Nhapmaytinh(mt);
Xuatmaytinh(mt);
Build code bằng makefile thì file Maytinh.o thì bình thường nhưng main.o thì thông báo không thể tham chiếu tới 2 hàm friend. Mong mọi người hướng dẫn.
Bài liên quan
Bạn đang làm gì?
friend nó có nghĩa là giúp truy cập những gì mà class đó được đặt private/protected.
Bạn chỉ đưa có 2 dòng code kia thì ai mà giải thích nổi.
1 lần nữa mình khuyên bạn nên học bài bản, đừng nhảy vọt. C/C++ nó dễ sử dụng nhưng để sử dụng tốt thì phải học chắc cái nền trước đã.
http://learncpp.com <= vào đây đề học lại từ đầu cho kỹ.
Thực ra em rành về C rồi em học c++ cơ bản rồi nhưng đang tự học oop. Em đã từng học c# oop do trường day. Em hiểu về oop. friend có 2 loại hàm và class. Nếu là class thì có thể truy vấn các phần tử private + protected. Hàm thì thông báo hàm đó không thuộc class nào và có thể truy cập private + protected.
code 3 file cua em.
Câu này là sao?
Còn cái đoạn này nữa @@
Mình khuyên bạn cứ học C++, C++ OOP là đảm bảo ôm được hết đống C, C#, Java,… ở mức căn bản, đủ để deal app.
Và học C++ thì hãy quên hết mấy thằng kia đi, chỉ cần chú ý học nó thôi. lên learncpp.com như mình đã nói rồi đọc khoảng 1 nửa và thực hành theo là dư sức rồi.
Friend:em đọc tới bây giờ thì em biết 2 cái: function friend và class friend
friend class: thì ai là bạn có thể truy xuất private và protected của lớp đó.
friend function: thì khi khai báo thì hàm đó sẽ không thuộc về class nào(class chứa khai báo). khi tạo đối tượng chứa hàm friend trong hàm thì nó có thể truy xuất vào các private và protected của class chứa nó.
Nếu em viết sai thì mong anh có thể chỉ dạy thêm. Em cảm ơn anh!
–>Ý định em viết ra không có ý gì hết em chỉ nói cái gì em biết thôi có gì mong anh tha lỗi.
Bạn không khai báo namespace cho 2 hàm này thì nó bị lỗi undefined là đúng rồi.
Và ở chỗ này:
đừng sử dụng using namespace thế này, bạn sẽ không biết rằng bạn đang khai báo cái gì cho thằng nào đâu, đừng nên theo C# hay Java ở khoản này, khai báo rõ ràng ra như sau:
Nó sẽ bó gọn vào trong scope đó, đến lúc đọc code bạn cũng biết được là hàm nào thuộc scope nào
// Header viết thế nào thì xuống dưới source viết y hệt như vậy.
Em cảm ơn anh nhiều nếu em có gì sai thì mong anh tha lỗi!
Cứ thoải mái đi bạn, có gì đâu mà lỗi với lầm. Giọng văn của mình nó nghe khó lọt tai nên giống như đang chửi nhau thôi, đừng để bụng