0

我正在尝试在 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;
    }
}
4

2 回答 2

1

因为在您的代码中的某处,您可以Node * nextPtr通过 class 的非成员函数访问Node。您可以创建一个getterfornextPrt来避免这种情况。

于 2013-10-07T21:44:22.440 回答
1

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

  1. nextPtr公开Node
  2. 添加公共访问器函数Node以访问它
  3. 声明List为来自 的朋友Nodefriend class List;
于 2013-10-07T21:44:30.180 回答