Ошибка частного указателя в связанном списке C ++

0

Я пытаюсь реализовать связанный список в C++, но каждый раз, когда я компилирую, я получаю сообщение об ошибке 'Node* Node::nextPtr' is private. Если я изменю nextPtr чтобы иметь общедоступную защиту, тогда я не получаю ошибку, и мой список в порядке. Может кто-нибудь сказать мне, почему это и как это исправить? Мои классы list и node следующие:

//list.h
#include <string>

#include "node.h"

using namespace std;

class List
{

    public:
            List();

            bool isEmpty();
            void insertAtFront(string Word);
            void displayList();

    private:
            Node * firstPtr;
            Node * lastPtr;

};


//node.h
#ifndef NODE_H
#define NODE_H

#include <string>

using namespace std;

class Node
{

    public:
            Node(string arg);

            string getData();



    private:
            string data;
            Node * nextPtr;


};


//node.cpp
#include <iostream>
#include <string>

#include "node.h"

using namespace std;

Node::Node(string arg)
    :nextPtr(0)
{
    cout << "Node constructor is called" << endl;
    data = arg;

}

string Node::getData()
{
    return data;
}


//list.cpp
#include <iostream>

#include "list.h"
#include "node.h"

using namespace std;

List::List()
    :firstPtr(0), lastPtr(0)
{
}

bool List::isEmpty()
{
    if(firstPtr == lastPtr)
            return true;
    else
            return false;
}

void List::displayList()
{
    Node * currPtr = firstPtr;

    do
    {

            if(currPtr->nextPtr == lastPtr) // Error here
                    cout << endl << currPtr->getData() << endl;
            cout << endl << currPtr->getData() << endl;

            currPtr = currPtr->nextPtr; //Error here

    }
    while(currPtr != lastPtr);

}

void List::insertAtFront(string Word)
{

    Node * newPtr = new Node(Word);

    if(this->isEmpty() == true)
    {
            firstPtr = newPtr;
            cout << "Adding first element...." << endl;
    }
    else if(this->isEmpty() == false)
    {
            newPtr->nextPtr = firstPtr; //Error here
            firstPtr = newPtr;
            cout << "Adding another element...." << endl;
    }
}
Теги:
linked-list

2 ответа

1
Лучший ответ

Вы не указали определения своих функций-членов внутри класса List, но я уверен, что из-за того, что эти функции-члены пытаются получить доступ к nextPtr из класса Node. Ты можешь,

  1. сделать nextPtr общедоступным из Node
  2. добавлять к Node публичные функции доступа к Node
  3. объявлять List в качестве друга из Node, friend class List;
  • 0
    Спасибо! Я использовал список friend class List; способ исправить это.
1

Потому что где-то в вашем коде вы Node * nextPtr доступ к Node * nextPtr не- Node * nextPtr функциями класса Node. Вы можете создать getter для nextPrt чтобы этого избежать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню