繁体   English   中英

访问朋友类的私有成员

[英]Access friend class's private member

我正在尝试编写像 Twitter 这样的控制台应用程序。 User 和 UserList 类相互包含。 我正在尝试访问以下用户的关注者。 UserList 类用于链表。

//User.h

#pragma once

#include <iostream>
#include <string>

using namespace std;

class UserList;
class User
{
   friend class UserList;
private:
   string userName;
   string personalComment;
   UserList *followed;
   UserList *following;
   int followedNumber;
   int followingNumber;
   //TWEET
   UserList *blocked;
   User* next;
public:
   User();
   User(string&,string&);
};

//UserList.h
#pragma once

#include <iostream>
#include <string>

using namespace std;


class User;

class UserList{
private:
    User *root;
public:
    UserList();
    ~UserList();
    void addUser(string&,string&);
    bool checkUser(string&);
    User& findUser(string&);
    void printList();
};

首先,我编写了一个函数来查找以下用户。

//userList.cpp
User& UserList::findUser(string& name)
{
   User *temp=root;
   while(temp!=NULL)
   {
       if(!name.compare(temp->userName))
       {
            return temp;
       }
       temp= temp->next;
    }
    temp= temp->next;
    return temp;
}

例如 user1 想要关注 user2。 我想检查 user1 是否已经关注 user2。( checkUser(username) 在列表中查找用户并返回 bool)

//main.cpp in main()
if(users.findUser(user1name).following->checkUser(user2name))
{
            cout<<"Err: The user '"<< user1name << "' has already followed '"<<user2name<<"'!"<<endl;
} 

但是有一个“UserList* User::following is private”错误和“在这个上下文中”

如何访问此用户的列表?

一般来说,你不应该把你的类的逻辑放在main 例如,您的问题可以通过向User添加一个方法来解决,该方法尝试添加另一个用户而不是在main中执行此操作。 像这样的东西:

User::FollowOther(std::string other){
    if(this->following->checkUser(other)) {
        cout<<"Err: The user '"<< userName << "' has already followed '"<<other<<"'!"<<endl;
    }
    /*...*/
} 

你得到的错误是因为User::followingUser是私有的。 私有成员只能从类内部访问。 例外是:您可以从声明为朋友的不同类中访问私有成员。 但是您不能访问main私有成员。 顺便说一句,我一点也不喜欢声明朋友,因为它打破了封装并使类之间的关系不那么明显,但这只是我的个人意见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM