2015-11-25 4 views
-1

Я пытаюсь написать консольное приложение, такое как Twitter. Классы пользователей и 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(); 
}; 

Во-первых, я написал функцию, чтобы найти следующего пользователя.

Например, user1 хочет следовать за пользователем2. Я хочу, чтобы проверить, действительно user1 уже следуют user2. (CheckUser (имя пользователя) ищет пользователь в списке и возврата BOOL)

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

Но есть «UserList * User :: следующая частная» ошибка и " в этом контексте "

Как я могу получить доступ к этим спискам?

+1

twitter - это консольное приложение? – user463035818

+0

@ tobi303 Мысль то же самое. : P Видимо, есть люди, которые не используют HTML-рендеринг, а просто читают теги и все ... – Downvoter

+0

В вашем коде нет 'User :: follow' – user463035818

ответ

0

В общем, вы не должны ставить логику своих классов в 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. Частные члены могут быть доступны только из класса. Исключение: вы можете получить доступ к закрытым членам из другого класса, объявленного как друг. Но вы не можете получить доступ к частным членам в main. Кстати, я вовсе не поклонник объявления друзей, потому что он нарушает инкапсуляцию и делает связь между классами менее очевидной, но это только мое личное мнение.

+0

О, я понял! Я пытаюсь сейчас –

+0

@MervePia есть некоторые другие меньшие проблемы с вашим кодом, например. почему вы храните указатели в списках? Я не вижу необходимости делать это. И еще одна второстепенная вещь: наличие 'followNumber' и' followNumber' в качестве членов 'User' заставляет вас писать ненужный код, потому что вам нужно будет обновлять эти номера. Вместо этого предоставим метод 'size()' для 'UserList', который будет служить той же цели. – user463035818

 Смежные вопросы

  • Нет связанных вопросов^_^