Я думал это только мне ошибки непонятны, а тем кто хорошо разбирается они много о чём говорят

Код программы с использованием ТОЛЬКО динам. структуры (работает):
#include <iostream>
#include <cstring>
using namespace std;
struct ListItem
{
std::string data; // Хранимые в элементе списка данные
ListItem *prev, *next; // Указатели на предыдущий и следующий элементы
// Конструктор
ListItem(const std::string data):prev(NULL),next(NULL)
{
this->data = data;
}
ListItem* getTail()
{
ListItem* item = this;
while(item->next)
item = item->next;
return item;
}
ListItem* addToTail(const std::string data)
{
ListItem *item = new ListItem(data), *last = getTail();
item->prev = last;
last->next = item;
return item;
}
ListItem* findLastItem(const std::string data)
{
ListItem* item = this, *last = NULL;
while(item->next)
{
if(item->data == data)
{
last = item;
}
item = item->next;
}
return last;
}
bool insertAfterLastItem(const std::string data, ListItem* list)
{
ListItem* last = findLastItem(data), *next_item, *prev_item, *list_last;
if(!last) return false;
next_item = last->next;
list_last = list->getTail();
list_last->next = next_item;
if(next_item)
next_item->prev = list_last;
list->prev = last;
last->next = list;
return true;
}
~ListItem()
{
if(next) delete next;
}
};
void print_list(ListItem* list)
{
ListItem* item = list;
while(item)
{
std::cout << item->data;
item = item->next;
if(item) std::cout << " ";
}
std::cout << std::endl;
};
void assigned(ListItem* list)
{
ListItem* item=list;
while (item)
{
item->data.assign(&item->data[1]);
item=item->next;
}
};
void plus_invert (ListItem* list)
{
ListItem *item=list->getTail();
while (item)
{
list->addToTail(item->data);
item = item->prev;
}
};
int main()
{
ListItem *a = new ListItem("aa1");
a->addToTail("aa2");
a->addToTail("aa3");
a->addToTail("aa4");
std::cout << "List a: ";
print_list(a);
ListItem *b = new ListItem("bb1");
b->addToTail("bb2");
b->addToTail("bb3");
b->addToTail("bb4");
std::cout << "List b: ";
print_list(b);
a->insertAfterLastItem("aa3", b);
std::cout << "Merged: ";
print_list(a);
assigned(a);
cout<<"After deleting first symbol: ";
print_list(a);
plus_invert(a);
cout<<"After inverting (and append): ";
print_list(a);
delete a;
return 0;
}
А вот код где я пихнул всё это дело в класс и встертился с той ошибкой:
#include <iostream>
#include <cstring>
using namespace std;
class Test
{
void print_list(ListItem* list)
{
ListItem* item = list;
while(item)
{
std::cout << item->data;
item = item->next;
if(item) std::cout << " ";
}
std::cout << std::endl;
};
void assigned(ListItem* list)
{
ListItem* item=list;
while (item)
{
item->data.assign(&item->data[1]);
item=item->next;
}
};
void plus_invert (ListItem* list)
{
ListItem *item=list->getTail();
while (item)
{
list->addToTail(item->data);
item = item->prev;
}
};
struct ListItem
{
std::string data; // Хранимые в элементе списка данные
ListItem *prev, *next; // Указатели на предыдущий и следующий элементы
// Конструктор
ListItem(const std::string data):prev(NULL),next(NULL)
{
this->data = data;
}
ListItem* getTail()
{
ListItem* item = this;
while(item->next)
item = item->next;
return item;
}
ListItem* addToTail(const std::string data)
{
ListItem *item = new ListItem(data), *last = getTail();
item->prev = last;
last->next = item;
return item;
}
ListItem* findLastItem(const std::string data)
{
ListItem* item = this, *last = NULL;
while(item->next)
{
if(item->data == data)
{
last = item;
}
item = item->next;
}
return last;
}
bool insertAfterLastItem(const std::string data, ListItem* list)
{
ListItem* last = findLastItem(data), *next_item, *prev_item, *list_last;
if(!last) return false;
next_item = last->next;
list_last = list->getTail();
list_last->next = next_item;
if(next_item)
next_item->prev = list_last;
list->prev = last;
last->next = list;
return true;
}
~ListItem()
{
if(next) delete next;
}
}
ListItem abc;
};
int main()
{
ListItem *a = new ListItem("aa1");
a->addToTail("aa2");
a->addToTail("aa3");
a->addToTail("aa4");
std::cout << "List a: ";
print_list(a);
ListItem *b = new ListItem("bb1");
b->addToTail("bb2");
b->addToTail("bb3");
b->addToTail("bb4");
std::cout << "List b: ";
print_list(b);
a->insertAfterLastItem("aa3", b);
std::cout << "Merged: ";
print_list(a);
assigned(a);
cout<<"After deleting first symbol: ";
print_list(a);
plus_invert(a);
cout<<"After inverting (and append): ";
print_list(a);
delete a;
return 0;
}
Изменения только в том что во втором коде я добавил класс Test и всё запихнул туда и тут же получил целую кучу ошибок. Main пока не изменял так как пока что дело даже не в том что класс не рабочий, а в том что он теперь не компилируется.
Добавлено позже:Я ведь имя структуры не менял, так почему же теперь функции не воспринимают объекты типа этой структуры (в этом ведь дело как я понял) ?