У меня возникла проблема с перегрузкой operator<<
, где я не могу получить доступ к закрытым переменным класса, независимо от того, что я делаю, потому что он скажет, что переменные являются закрытыми как ошибка компилятора. Это мой текущий код:Оператор «Друг» << Проблемы с перегрузкой,
#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);
}
И прототип функции и частные переменные в library.h
являются
#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
Я знаю, что должен, поэтому я смущен, потому что он все еще говорит, что myNum ... является приватным при компиляции. Вот код ошибки, если это поможет. C: \ Users \ Devin \ Documents \ C++ SMCCLASS \ LibrarySystem \ library.h || В функции 'cs52 :: Оператор библиотеки << (std :: ostream &, const cs52 :: Library &)': | C: \ Users \ Devin \ Documents \ C++ SMCCLASS \ LibrarySystem \ library.h | 23 | error: 'int cs52 :: Library :: myNumberOfBooksSeenSoFar' является приватным | –
@ Дэвин: Ты уверен? Для начала прототип функции неправильный. –
@Devin: Проверьте обновленный ответ, я думаю, что это ваша проблема. Обратите внимание на типы параметров! –