访问好友class的私人会员
Access friend class's private member
我正在尝试编写类似 Twitter 的控制台应用程序。 User 和 UserList classes 相互包含。我正在尝试访问以下用户的关注者。 UserListclass用于链表
//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) 在列表中查找用户和 return 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"错误和"within this context"
如何访问此用户的列表?
一般来说,您不应将 class 的逻辑放在 main
中。例如,您的问题可以通过向 User
添加一个方法来解决,该方法尝试添加另一个用户而不是在 main
中执行此操作。像这样:
User::FollowOther(std::string other){
if(this->following->checkUser(other)) {
cout<<"Err: The user '"<< userName << "' has already followed '"<<other<<"'!"<<endl;
}
/*...*/
}
你得到的错误是因为 User::following
在 User
中是私有的。私有成员只能从 class 中访问。例外情况是:您可以从声明为好友的不同 class 中访问私有成员。但是您不能访问 main
中的私有成员。顺便说一句,我一点也不喜欢声明朋友,因为它破坏了封装并使 class 之间的关系不那么明显,但这只是我个人的看法。
我正在尝试编写类似 Twitter 的控制台应用程序。 User 和 UserList classes 相互包含。我正在尝试访问以下用户的关注者。 UserListclass用于链表
//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) 在列表中查找用户和 return 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"错误和"within this context"
如何访问此用户的列表?
一般来说,您不应将 class 的逻辑放在 main
中。例如,您的问题可以通过向 User
添加一个方法来解决,该方法尝试添加另一个用户而不是在 main
中执行此操作。像这样:
User::FollowOther(std::string other){
if(this->following->checkUser(other)) {
cout<<"Err: The user '"<< userName << "' has already followed '"<<other<<"'!"<<endl;
}
/*...*/
}
你得到的错误是因为 User::following
在 User
中是私有的。私有成员只能从 class 中访问。例外情况是:您可以从声明为好友的不同 class 中访问私有成员。但是您不能访问 main
中的私有成员。顺便说一句,我一点也不喜欢声明朋友,因为它破坏了封装并使 class 之间的关系不那么明显,但这只是我个人的看法。