Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: [ Solved ]Lỗi khi sử dụng friend

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Unhappy [ Solved ]Lỗi khi sử dụng friend

    Kim đang thử sử dụng friend nhưng quái sao lỗi kì quá

    1. Khai báo: book_class.h
    C++ Code:
    1.         friend
    2.         std::ostream&    operator<< (std::ostream&, const Book&);

    2. Định nghĩa: book_class.cpp
    C++ Code:
    1. std::ostream& Book::operator<< (std::ostream& __o, const Book& __b) { // lỗi tại đây
    2.     return ( __o << "[=== Book Info ===]"             << std::endl
    3.                  << "Title   : " << __b.get_title()   << std::endl
    4.                  << "Year    : " << __b.get_year()    << std::endl
    5.                  << "Author  : " << __b.get_author()  << std::endl
    6.                  << "Edition : " << __b.get_edition() << std::endl
    7.                  << "ISBN    : " << __b.get_isbn()    << std::endl
    8.                  << "Note    : " << __b.get_note()    << std::endl
    9.                  << "[=================]"             << std::endl
    10.             );
    11. }

    3. Lỗi thông báo:
    C++ Code:
    1. book_class.cpp|108|error: `std::ostream& Book::operator<<(std::ostream&, const Book&)' must take exactly one argument|
    2.  
    3. book_class.cpp|108|error: no `std::ostream& Book::operator<<(std::ostream&, const Book&)' member function declared in class `Book'|
    4.  
    5. ||=== Build finished: 2 errors, 0 warnings ===|

    Rõ ràng là Kim khai báo rồi mà sao nó nói Kim chưa khai báo

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Em both cả 2 file lên xem ?

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    724

    hix, friend thì khi code hình như là không cần cái này thì phải
    C++ Code:
    1. Book::operator<<

    Em thử sửa lại:
    C++ Code:
    1. std::ostream& Book::operator<< (std::ostream& __o, const Book& __b)
    thành:
    C++ Code:
    1. std::ostream& operator<< (std::ostream& __o, const Book& __b)
    xem sao.


    P/s: sao thấy em đặt tên biến toàn dùng tiền tố là: __ không nhỉ

  4. #4
    Ngày gia nhập
    11 2008
    Bài viết
    186

    1. book_class.h
    C++ Code:
    1. #ifndef __BOOK_CLASS_H__
    2. #define __BOOK_CLASS_H__
    3.  
    4. /////////////////////////////////////////////////
    5. // @author: bvKim
    6. // @file: book_class.h
    7. // @date: 19-Nov-2008
    8. // @purpose: class 'Book' prototype
    9. // @note:
    10. /////////////////////////////////////////////////
    11. #include <iostream>
    12. #include <string>
    13.  
    14. /***************
    15.  * @class Book *
    16.  ***************/
    17.  
    18. class Book {
    19.     public:
    20.         Book(std::string __t = "<title>", int __y = 2008, std::string __a = "<author>", int __e = 1, long __i = 00000000, std::string __n = "<note>")
    21.             : _title(__t), _year(__y), _author(__a), _edition(__e), _isbn(__i), _note(__n) {
    22.         };
    23.         Book(const Book&);
    24.         virtual ~Book();
    25.  
    26.         const Book& operator=             (const Book&);
    27.         bool  operator==            (const Book&) const;
    28.         bool  operator!=            (const Book&) const;
    29.  
    30.         void set_title              (const std::string&);
    31.         void set_year               (const int&);
    32.         void set_author             (const std::string&);
    33.         void set_edition            (const int&);
    34.         void set_isbn               (const long&);
    35.         void set_note               (const std::string&);
    36.  
    37.         std::string         get_title()            const;
    38.         int                 get_year()             const;
    39.         std::string         get_author()           const;
    40.         int                 get_edition()          const;
    41.         long                get_isbn()             const;
    42.         std::string         get_note()             const;
    43.  
    44.         friend
    45.         std::ostream&    operator<< (std::ostream&, const Book&);
    46.  
    47.         virtual std::string         getClassName()  const;
    48.  
    49.     private:
    50.         std::string     _title;
    51.         int             _year;
    52.         std::string     _author;
    53.         int             _edition;
    54.         long            _isbn;
    55.         std::string     _note;
    56. };
    57.  
    58. #endif // __BOOK_CLASS_H__

    2. book_class.cpp
    C++ Code:
    1. /////////////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: book_class.cpp
    4. // @date: 19-Nov-2008
    5. // @purpose: class 'Book' define
    6. // @note:
    7. /////////////////////////////////////////////////
    8.  
    9. #include "book_class.h"
    10.  
    11. /**
    12.  * 1. Constructor & Destructor
    13.  **/
    14. Book::Book(const Book& __b) {
    15.     *this = __b;
    16. }
    17.  
    18. Book::~Book() {
    19.  
    20. }
    21.  
    22. /**
    23.  * 2. Operator
    24.  **/
    25. const Book& Book::operator= (const Book& __b)  {
    26.     this->_title = __b.get_title();
    27.     this->_year  = __b.get_year();
    28.     this->_author = __b.get_author();
    29.     this->_edition = __b.get_edition();
    30.     this->_isbn = __b.get_isbn();
    31.     this->_note = __b.get_note();
    32.  
    33.     return *this;
    34. }
    35.  
    36. bool Book::operator== (const Book& __b) const {
    37.     return (    ( this->_title == __b.get_title() )
    38.             &&  ( this->_year  == __b.get_year()  )
    39.             &&  ( this->_author == __b.get_author() )
    40.             &&  ( this->_edition == __b.get_edition() )
    41.             &&  ( this->_isbn == __b.get_isbn() )
    42.             &&  ( this->_note == __b.get_note() )
    43.            );
    44. }
    45.  
    46. bool Book::operator!= (const Book& __b) const {
    47.     return (    ( this->_title != __b.get_title() )
    48.             &&  ( this->_year  != __b.get_year()  )
    49.             &&  ( this->_author != __b.get_author() )
    50.             &&  ( this->_edition != __b.get_edition() )
    51.             &&  ( this->_isbn != __b.get_isbn() )
    52.             &&  ( this->_note != __b.get_note() )
    53.            );
    54. }
    55.  
    56. /**
    57.  * 3. Properties
    58.  **/
    59. // title
    60. void Book::set_title(const std::string& __t) {
    61.     this->_title = __t;
    62. }
    63.  
    64. std::string Book::get_title() const {
    65.     return this->_title;
    66. }
    67.  
    68. // year
    69. void Book::set_year(const int& __y) {
    70.     this->_year = __y;
    71. }
    72.  
    73. int Book::get_year() const {
    74.     return this->_year;
    75. }
    76.  
    77. // author
    78. void Book::set_author(const std::string& __a) {
    79.     this->_author = __a;
    80. }
    81.  
    82. std::string Book::get_author() const {
    83.     return this->_author;
    84. }
    85.  
    86. // edition
    87. void Book::set_edition(const int& __e) {
    88.     this->_edition = __e;
    89. }
    90.  
    91. int Book::get_edition() const {
    92.     return this->_edition;
    93. }
    94.  
    95. // isbn
    96. void Book::set_isbn(const long& __i) {
    97.     this->_isbn = __i;
    98. }
    99.  
    100. long Book::get_isbn() const {
    101.     return this->_isbn;
    102. }
    103.  
    104. // note
    105. void Book::set_note(const std::string& __n) {
    106.     this->_note = __n;
    107. }
    108.  
    109. std::string Book::get_note() const {
    110.     return this->_note;
    111. }
    112.  
    113. /**
    114.  * 4. Other
    115.  **/
    116. std::ostream& Book::operator<< (std::ostream& __o, const Book& __b) { // error
    117.     return ( __o << "[=== Book Info ===]"             << std::endl
    118.                  << "Title   : " << __b.get_title()   << std::endl
    119.                  << "Year    : " << __b.get_year()    << std::endl
    120.                  << "Author  : " << __b.get_author()  << std::endl
    121.                  << "Edition : " << __b.get_edition() << std::endl
    122.                  << "ISBN    : " << __b.get_isbn()    << std::endl
    123.                  << "Note    : " << __b.get_note()    << std::endl
    124.                  << "[=================]"             << std::endl
    125.             );
    126. }
    127.  
    128. /**
    129.  * 5. Method
    130.  **/
    131. std::string Book::getClassName() const {
    132.     return "Book";
    133. }

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Zkday nói đúng rùi đó, không để ý em để cả cái Book:: vào

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Mặc định [ Solved ]Lỗi khi sử dụng friend

    Trích dẫn Nguyên bản được gửi bởi zkday2686 Xem bài viết
    hix, friend thì khi code hình như là không cần cái này thì phải
    C++ Code:
    1. Book::operator<<

    Em thử sửa lại:
    C++ Code:
    1. std::ostream& Book::operator<< (std::ostream& __o, const Book& __b)
    thành:
    C++ Code:
    1. std::ostream& operator<< (std::ostream& __o, const Book& __b)
    xem sao.


    P/s: sao thấy em đặt tên biến toàn dùng tiền tố là: __ không nhỉ
    đúng rồi; em sửa được rồi.
    cái friend này hơi khó hiểu quá...

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    cái friend này hơi khó hiểu quá...
    friend là bạn, không phải là người trong "nhà" nên em không thể khai báo như vậy được.
    toán tử :: chỉ dùng với "người trong nhà" không dùng với "kẻ ngoại đạo" .

    còn vì sao nó dùng được các thuộc tính private thì là vì nó là bạn(được tin tưởng) nên được quyền truy cập tới những thằng mà trong "nhà" dấu đi (vào chơi nhiều nên biết chổ họ dú đi những vật họ không muốn cho mình biết giống như em đi chổ nào chơi chủ nhà họ dú con gái của họ đi không cho người khác đụng tới con gái họ trược tiếp vậy , nếu em vào chơi 'cắm ở đó' riết rùi sẽ biết họ dú con gái của họ đi đâu hì hì. )
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 19-11-2008 lúc 12:22 PM.

  8. #8
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Trích dẫn Nguyên bản được gửi bởi zkday2686 Xem bài viết
    friend là bạn, không phải là người trong "nhà" nên em không thể khai báo như vậy được.
    toán tử :: chỉ dùng với "người trong nhà" không dùng với "kẻ ngoại đạo" .

    còn vì sao nó dùng được các thuộc tính private thì là vì nó là bạn(được tin tưởng) nên được quyền truy cập tới những thằng mà trong "nhà" dấu đi (vào chơi nhiều nên biết chổ họ dú đi những vật họ không muốn cho mình biết giống như em đi chổ nào chơi chủ nhà họ dú con gái của họ đi không cho người khác đụng tới con gái họ trược tiếp vậy , nếu em vào chơi 'cắm ở đó' riết rùi sẽ biết họ dú con gái của họ đi đâu hì hì. )
    hix...giải thích thế này thì ngu đến đâu cũng hiểu

    Kim hiểu rồi nè

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Potay zkday ! Chỗ nào có G chỗ đó có Z !

Các đề tài tương tự

  1. Bài tập C lỗi hàm friend
    Gửi bởi fushi_nguyen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 26-12-2012, 05:45 PM
  2. Bài tập C++ bị lỗi hàm friend trong C++
    Gửi bởi ttkm4u trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 16-04-2012, 01:02 AM
  3. về friend và toán tử >>
    Gửi bởi MQuy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 13-03-2009, 01:29 PM
  4. [ Solved ]Thừa kế đối với friend function
    Gửi bởi thavali trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 22-11-2008, 09:50 AM
  5. [ Solved ]Thắc mắc friend functions
    Gửi bởi dauchuot trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 06-10-2006, 10:42 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn