【发布时间】:2017-12-03 02:50:25
【问题描述】:
我在实现中遇到了这个错误:
struct bookdatabase::Bookdatabase::Book
类“bookdatabase::BookDatabase::Book”不可访问
以下解决方案均未解决我的问题:
- std::basic_ostream is inaccessible in C++
- cannot access private members in friend ostream
- My ostream and istream friend function can't access private class members
- member of class inaccessible
-
Inaccessible Members ?
Here's Visual Studio 在 .cpp 文件中存在问题的图片。
Here's头文件中声明的图片。
数据库.h
#include <string>
#include <vector>
#ifndef BOOKDATABASE_H
#define BOOKDATABASE_H
namespace bookdatabase {
class BookDatabase {
private:
struct Book {
private:
std::string authorFirstName, authorLastName, authorFullName, bookTitle, pubDate;
public:
Book(const std::string &authFirst, const std::string &authLast, const std::string &title, const std::string &date);
std::string getAuthor() const;
std::string getBookTitle() const;
std::string getPubDate() const;
bool operator < (const Book &rhs) const;
friend std::ostream& operator << (std::ostream& out, const bookdatabase::BookDatabase::Book& book);
};
void sortBooks();
std::vector<Book>::iterator search(const std::string &title);
public:
BookDatabase();
void printBookList();
std::vector<Book> getDatabase() const;
void removeBook(const std::string &title);
void addBook(const std::string &authFirst, const std::string &authLast, const std::string &title, const std::string &date);
private:
std::vector<Book> database;
};
}
#endif // BOOKDATABASE_H
数据库.cpp
std::ostream & bookdatabase::operator<<(std::ostream & out, const bookdatabase::BookDatabase::Book & book) {
out << authorFullName << ". " << bookTitle << ". " << pubDate;
return out;
}
我遇到这个问题是因为Book 类是嵌套类吗?
【问题讨论】:
-
“我有这个问题是因为
Book类是一个嵌套类吗?” 不,你有这个问题是因为它是一个private嵌套类。 -
@user0042 谢谢。我的理解是,如果重载运算符是类的朋友,它将可以访问其私有成员。如果课程是私人的,这不适用吗?让操作符成为 Database 类的朋友而不是访问 Book 类有意义吗?
标签: c++ c++11 inner-classes friend ostream