Первый постер здесь, и очень начинающий программист на С ++ (текущий 3-й семестр, работающий с языком), и у меня возникли некоторые проблемы. После поисков по форуму и поиска по форуму я не смог найти решение - любая помощь, которую вы могли бы предложить, была бы полезна.
1-й заголовочный файл:
linked_list.h
#ifndef my_linked_list
#define my_linked_list
#include "Node.h"
#include <cstdlib>
namespace linked_list_version_0{
class linked_list {
public:
linked_list() {head = NULL; tail = NULL;}
~linked_list();
void insert_back (int x);
void insert_front (int x);
int remove_front ();
int remove_back();
bool empty() {return (head == NULL);}
private:
node * head;
node * tail;
}; //end class linked_list
}//end namespace linked_list_version_0
#endif
Файл реализации:
linked_list.cpp
#include "stdafx.h"
#include "Node.h"
#include "linked_list.h"
#include <iostream>
using namespace node_version_0;
using namespace linked_list_version_0;
void linked_list::insert_front (int x) {
node *p = new node;
p->set_data (x);
p->set_next (head);
head = p;
if (head->next() == NULL) tail = head; // takes care of inserting into the empty list
} //end insert_front
int linked_list::remove_front() {
// assumes the list is not empty
node *p = head;
int x = p-> get_data(); //could not use data(), had to use get_data
head = head->next() ;
delete p;
if (head==NULL) tail = NULL; // takes care of deleting only element in the list
return x;
}//end remove_front
linked_list::~linked_list() {
node * p;
while (head != NULL) {
p=head;
head = head->next();
delete p;
}
tail = NULL;
}//deconstructor
void linked_list::insert_back (int x) {
node * q = new node;
q->set_data(x);
q->set_next(NULL);
if (tail == NULL) head = q; else tail -> set_next(q);
tail = q;
} //end insert_back
int linked_list::remove_back () {
// assumes the list isn’t empty
node *q = tail;
int x= tail->data();
if (head == tail)
{head = NULL; tail = NULL;}
else {
tail = head;
while (tail->next()!=q)
tail = tail->next();
}
delete q;
tail->set_next(NULL);
return x;
} //end remove back
2-й заголовочный файл
node.h
#ifndef my_node
#define my_node
#include "linked_list.h"
//implementation file unnecessary for this header as
//inline declarations are used
namespace node_version_0{
class node{
public:
node();
void set_data(int x) {data = x;} //sets the data value of the node
void set_next( node * n) { next = n;} //sets the address to the next node
int get_data() const {return data;} //returns the data value from the node to user
node * next() {return next;}; //returns the address of the next node
const node * next() const {return next;} //same as above, "write protected"
private:
int data;
node * next;
};//end class node
}//end namespace node_version_0
#endif
Итак, проблема, с которой я сталкиваюсь, связана с файлом реализации connected_list.cpp .
Все вхождения head-> next () выдают ошибку «Выражение должно иметь указатель на тип класса». Та же самая ошибка возникает для всех случаев tail-> whatevers здесь
Так что я уверен, что это что-то простое - но, будучи довольно новичком, я просто не могу понять это. Я знаю, что этот код, вероятно, выглядит небрежно для вас, ребята, ха-ха, поэтому любые ваши указатели будут очень благодарны. К вашему сведению, это школьное задание.
Извините, если форматирование выключено / плохо читается. Спасибо за вашу помощь!