简体   繁体   中英

Private Pointer error in C++ linked list

I'm trying to implement a linked list in C++, but every time I compile, I get an error that says 'Node* Node::nextPtr' is private . If I change nextPtr to have public protection, then I don't get the error and my list is fine. Can someone tell me why this is and how to fix it? My list and node classes are as follows:

//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;
    }
}

Because somewhere in your code, you access Node * nextPtr by non member functions of class Node . You can create a getter for nextPrt to avoid that.

You didn't show the definitions of your member functions inside the List class, but I bet it is due to those member functions try to access nextPtr from the Node class. You can,

  1. make nextPtr public from Node
  2. add public accessor functions to Node to access it
  3. declare List as a friend from Node , friend class List;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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