Вы должны использовать оператор new
вместо malloc
.Смотрите разницу здесь .Кроме того, зачем использовать struct
s и typedef
s, когда c ++ позволяет вам сделать class
Вот моя версия вашего кода, она еще не содержит ошибок, но она должна проиллюстрировать, как использовать new
и classes
.Я постараюсь исправить это полностью и обновить вас.
Также обратите внимание, что в структуре класса c ++ вы автоматически получаете указатель this
с функциями-членами, который действует как указатель на класс, так что вы больше не будетедолжен передать word* theList
Редактировать: я обновил с рабочим кодом, единственное, что не работает, это аспект подсчета в списке.В противном случае обратите внимание, что есть два класса, List
интерфейсы с word
для создания связанного списка, я не включил в код какие-либо аспекты управления памятью (что было бы не так сложно при использовании деструктора c ++, если вам нужны такие средствапожалуйста, укажите это в комментариях, и я обязательно добавлю.
#include <iostream>
#include <string>
using namespace std;</p>
<p>class word
{
public:
string name;
int count;
word *next;</p>
<pre><code>word (string name);
};
word :: word (string myName) {name = myName; next =NULL; count = 0;}
список классов {public: bool isEmpty; word * theHead;
List();
List(word* aHead);
void print();
void add(string myString);
};
List :: List () {isEmpty= true;}
List :: List (word * aHead) {isEmpty = false; theHead = aHead;}
void List :: add (string myString) {word * newWord = newword (myString); if (isEmpty == true) {isEmpty = false; theHead = newWord;} else {word * current = theHead; while (current-> next! = NULL) {current = current-> next;} current-> next = newWord;}} void List :: print () {if (isEmpty) {cout << "ничего в списке";} else {word * current = theHead; while (current! =NULL) {cout << current-> name << ":" << current-> count << "\ n";текущий = текущий-> следующий;}}}
int main (void) {List theList = List ();string str1 = "Hello";строка str2 = "мир";theList.add (str1);theList.add (str2);theList.print ();}
Редактировать: Здесь деструктор для освобождения выделенной памяти, обязательно добавьте прототип ~List()
в объявлении класса:
<code>List::~List()
{
if (!isEmpty)
{
word* prev = NULL;
word* current = theHead;
while(current != NULL)
{
prev = current;
current = current->next;
delete prev;
}
}
}
Надеюсь, это поможет.