2011-09-19 19 views
1

operator<<オーバーロードの問題が発生しています。クラスのプライベート変数にアクセスすることができません。変数はプライベート変数コンパイラエラー。これは私の現在のコードです:あなたの<<オペレータは、このprotoypeをフレンドオペレータ<<オーバーロードの問題

#ifndef LIBRARY_H 
#define LIBRARY_H 
#define BookNotFound 1 
#include "Book.h" 
#include <iostream> 
#include <cstdlib> 

using namespace std; 

namespace cs52{ 

    class Library{ 
    public: 
     Library(); 
     void newBook(string title, string author); 
     void checkout(string title, string author) {throw (BookNotFound);} 
     void returnBook(string title, string author) {throw (BookNotFound);} 
     friend Library operator << (Library& out, const Library & l); 

    private: 

     Book myBooks[ 20 ]; 
     int myNumberOfBooksSeenSoFar; 

    }; 
} 
#endif 

答えて

5

を持つ必要がありますされているlibrary.h

#include "library.h" 
#include "Book.h" 

using namespace cs52; 

Library::Library(){ 
    myNumberOfBooksSeenSoFar=0; 
} 
//skipping most of the functions here for space 

Library operator << (ostream &out, const Library & l){ 
    int i=myNumberOfBooksSeenSoFar; 
    while(i<=0) 
    { 
     cout<< "Book "; 
     cout<<i; 
     cout<< "in library is:"; 
     cout<< l.myBooks[i].getTitle(); 
     cout<< ", "; 
     cout<< l.myBooks[i].getAuthor(); 
    } 


    return (out); 
} 

と関数のプロトタイプとプライベート変数:

std::ostream& operator << (std::ostream &out, const Library & l) 
^^^^^^^^^^^^^ 

あなたが返す必要がありますstd::ostreamオブジェクトを参照して、ストリーム操作を連鎖させることができます。

また、Libraryクラスの友達として宣言すると、オーバーロードされた関数のLibraryクラスのすべてのメンバー(プライベート/保護された)にアクセスできるはずです。私はあなたのコードを理解することはできない。このよう


として、あなたはあなたの<<演算子を宣言した:あなたはプロトタイプを使用して演算子関数を定義し

friend Library operator << (Library& out, const Library & l); 
          ^^^^^^^^^^^^ 

Library operator << (ostream &out, const Library & l) 
         ^^^^^^^^^^^ 

彼らは異なっています!
あなたは、プライベートメンバーにあなたのクラスの友人としてアクセスしている関数を宣言していないので、エラーです。 また、前述のように戻り値の型が誤っています。

+0

私はすべきことを知っています。なぜなら、myNumはまだコンパイル時にプライベートであると言っているので、私は混乱しています。それが役立つなら、ここにエラーコードがあります。 C:\ Users \ Devin \ Documents \ C++ SMCCLASS \ LibrarySystem \ library.h ||関数 'cs52 :: Library operator <<(std :: ostream&、const cs52 :: Library&)':| C:\ Users \ Devin \ Documents \ C++ SMCCLASS \ LibrarySystem \ library.h | 23 |エラー: 'int cs52 :: Library :: myNumberOfBooksSeenSoFar'は非公開です。 –

+0

@Devin:本当ですか?関数のプロトタイプは、間違っています。 –

+0

@Devin:更新された答えを確認してください、あなたの問題だと思います。パラメータの種類に注意してください! –

関連する問題