Статический связанный список
Нужно создать класс со статическим связанным списком. Создаю статический указатель на начало списка, потом при использовании выдает ошибку: скрин
При перемещении в public та же ошибка.
Код:
#include <iostream>
using namespace std;
struct Node{
int data;
Node *next;
};
class Ship{
protected:
int a = 15;
int b;
private:
static Node *head;
public:
Ship(){
cout << "q i'm ship\n";
head = nullptr;
};
void addNode(int d){
Node *nd = new Node; //динамически создаем новый узел
nd->data = d; //задаем узлу данные
nd->next = NULL; //новый узел в конце, поэтому NULL
if(head == NULL) //если создаем первый узел
head = nd;
else //если узел уже не первый
{
Node *current = head;
//ищем в цикле предшествующий последнему узел
while(current->next != NULL)
current = current->next;
//предшествующий указывает на последний
current->next = nd;
}
};
static void printList()
{
Node *current = head;
while(current != NULL)
{
cout << current->data << endl;
current = current->next;
}
}
};
class Parohod : public Ship{
public:
Parohod(){
cout << "q i'm parohod\n";
};
static void pisful(){
cout << "pisful";
}
};
class Parysnick : public Ship{
public:
Parysnick(){
cout << "q i'm parysnick\n" << a << endl;
};
};
class Corvet : public Ship{
public:
Corvet(){
cout << "q i'm corvet\n";
};
};
int main(){
Parohod par;
par.addNode(5);
par.addNode(11);
Parohod::printList();
Parohod::pisful();
return 0;
}
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
static внутри класса декларирует статический член, а ещё его нужно определить вне класса. Таким образом вы выделяете под него память. Подробности тут: static members.
// обычно в заголовочном файле ship.h
class Ship {
static Node *head;
};
// обычно в файле реализации ship.cpp
Node *Ship::head = nullptr;
Вот полный пример. Ответ на вопрос тут: Node *List::head = nullptr;:
#include <iostream>
struct Node {
int data;
Node *next;
};
struct List {
static Node *head;
static void add(int data) {
Node **node;
for (node = &head; *node != nullptr; node = &((*node)->next)) {
}
*node = new Node({data, nullptr});
}
static void print() {
for (Node *node = head; node != nullptr; node = node->next) {
std::cout << node->data << '\n';
}
}
};
Node *List::head = nullptr;
int main() {
List::add(1);
List::add(2);
List::add(42);
List::print();
}