Нет доступа к закрытым членам класса (C ++) - PullRequest
0 голосов
/ 07 мая 2020

Я разработал решение на C ++, использующее связанные списки. Сначала я использовал struct для создания своего списка и узлов (которые работали отлично), но теперь мне нужно иметь приватные данные, поэтому теперь я использую classes. Я не могу получить доступ к закрытым членам двух моих классов.

Вот мой класс узла

class node{                                                         //class for a node  ;
        private:
            int info;
            class node *next;
        public:
            node();
            node(int info1,node myNode){
                info1 = info;
                *next = myNode;
            }
    };
    typedef class node Node;                                        //the new class called Node

Вот мой класс списка

    class mylist{                                                       //class for a list   ;
    private:
        Node *head;
        Node *tail;
    public:
        mylist();
        mylist(node a, node b){
        *head = a;
        *tail = b;
        }
        node getHead(){
            return *head;
        }
        node getTail(){
            return *tail;
        }
};
typedef class mylist Tlist;                                        //the new class called Tlist

Вот функция из которого я пытаюсь получить доступ к членам класса:

int isEmpty(Tlist l){
    /** Return true if the head of the list is NULL and false otherwise **/
    return getHead(l.head) == NULL;   //error occurs for this line ('Node mylist::head' is private within this content)
}

1 Ответ

1 голос
/ 07 мая 2020

Вы реализуете пустой чек как бесплатную функцию. Эта функция не имеет доступа к закрытым членам.

Два возможных решения:

Первая бесплатная функция с использованием членов publi c (использование: isEmpty(l)):

bool isEmpty(Tlist l){
    /** Return true if the head of the list is NULL and false otherwise **/
    return l.getHead() == nullptr;   //error occurs for this line ('Node mylist::head' is private within this content)
}

Второй - это функция-член (использование: l.isEmpty()):

class mylist {
public:
    bool isEmpty(){
        /** Return true if the head of the list is NULL and false otherwise **/
        return head == nullptr;   //error occurs for this line ('Node mylist::head' is private within this content)
    }
}

Обратите внимание, что я изменил NULL (C стиль) на nullptr, а возвращаемое значение - с * С 1015 * на bool. Ваше тело функции тоже выглядело странно, поэтому я изменил его на более подходящий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...