【问题标题】:Friend class in C++ not allowing access to private member attributesC ++中的朋友类不允许访问私有成员属性
【发布时间】:2021-12-30 09:56:07
【问题描述】:

我最近开始使用 C++,老实说,我的讲师帮不上什么忙,我试图让链表朋友访问节点类。据我所知,我已经声明了我需要的一切,但我仍然无法访问节点私有成员,如果有人能看到我缺少的东西,那就太好了!

我的节点头文件:

```#ifndef NodeofBook_h
#define NodeofBook_h

#include <stdio.h>
#include "Book.h"

class ListOfBooks;
//
class NodeofBook {
    
    friend class ListOfBooks;
    
private:
    NodeofBook* next;
    Book* theBook;
    
public:
    
};


#endif /* NodeofBook_h */

我的链表头文件:

#ifndef ListOfBooks_h
#define ListOfBooks_h

#include <stdio.h>
#include "NodeofBook.h"

class ListOfBooks {
    
private:
    
public:
    ListOfBooks();
    void insertBack(int);
    void displayList();
    int deleteMostRecent();
    int deleteInt(int pos);
};


#endif /* ListOfBooks_h */

我的链表 cpp 文件:

#include "ListOfBooks.h"

int ListOfBooks(){
    
    return 0;
}

ListOfBooks::ListOfBooks(){
    theBook->title = "noTitleYet";
    theBook->isbn = 0000;
    next = NULL;
}

我收到一条错误消息,说明使用未声明的标识符“theBook”

非常感谢任何帮助!

【问题讨论】:

  • ListOfBooks 可以访问NodeofBook 实例的私有成员变量,但在ListOfBooks() 构造内部没有这样的NodeofBook 实例可供它操作。你的意思是ListOfBooks 有一个NodeofBook 成员吗?

标签: c++ class friend


【解决方案1】:

NodeofBook 声明ListofBooks 是朋友类只是意味着ListofBooks 的实现可以访问NodeofBook 的私有成员,但仍然需要有NodeofBook 的实例才能访问。它的成员不是静态的;非静态成员变量是某个对象的一部分。也就是说,仅仅因为ListofBooksNodeofBook 的朋友并不意味着它神奇地拥有NodeofBookmembers 的实例。

朋友关系不是像继承那样的is-a关系:它只是关于访问。

【讨论】:

  • 谢谢!!我已经看了一个多小时,甚至没有意识到我在尝试访问它之前从未创建过 NodeofBook 的实例,不敢相信我错过了!欢呼
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2014-06-18
  • 2015-11-24
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多