Я пытаюсь реализовать связанный список в 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;
}
}
Вы не указали определения своих функций-членов внутри класса List
, но я уверен, что из-за того, что эти функции-члены пытаются получить доступ к nextPtr
из класса Node. Ты можешь,
nextPtr
общедоступным из Node
Node
публичные функции доступа к Node
List
в качестве друга из Node
, friend class List;
Потому что где-то в вашем коде вы Node * nextPtr
доступ к Node * nextPtr
не- Node * nextPtr
функциями класса Node
. Вы можете создать getter
для nextPrt
чтобы этого избежать.
friend class List;
способ исправить это.