链表中C++专用指针错误

Private Pointer error in C++ linked list

本文关键字:指针 错误 专用 C++ 链表      更新时间:2023-10-16

我正在尝试在C++中实现链表,但每次编译时,我都会收到一个错误,说'Node* Node::nextPtr' is private .如果我将nextPtr更改为具有公共保护,那么我不会收到错误,并且我的列表很好。有人可以告诉我为什么会这样以及如何解决它吗?我的listnode课程如下:

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

您没有在 List 类中显示成员函数的定义,但我敢打赌这是由于这些成员函数尝试从 Node 类访问nextPtr。您可以

  1. Node公开nextPtr
  2. 将公共访问器函数添加到Node以访问它
  3. 宣布ListNode的朋友,friend class List;

因为在代码中的某个地方,您可以通过类 Node 的非成员函数访问Node * nextPtr。 您可以为nextPrt创建一个getter以避免这种情况。