Вот заголовок файла
class sv1{
private:
struct Node{
string title;
Node* next;
};
public:
void InsertAfter(Node **head, string title);
void getMetadata(string t);
void q_folder(string t_q);
Вот как будет выглядеть файл cc
void sv1::getMetadata(string t)
{
Node *head=NULL;
title=t;
q_folder(title);
}
void sv1::q-folder(string t_q)
{
InsertAfter(&head,t_q);
}
void sv1::insertAfter(Node **head,string title)
{
if (head==NULL)
{
Node* temp=NULL;
temp=new Node;
temp->title=title;
*head=temp;
}
else{
Node *temp= new Node;
temp= new Node;
temp->title=title;
temp->next=(*head)->next;
(*head)->=temp;
}
}
Ошибка говорит о том, что голова не объявлена в функции q_folder. Что вызывает это и как я могу решить это?
В вашем методе q-folder вы вызываете insertAfter с помощью «&голова «. Единственный способ, которым голова может быть узнаваема в любом методе класса — это если
Видя, что это не один из трех, он не знает, что вы подразумеваете под «&head «. Кроме того, как упомянуто исправление hmjd, ни один из ваших объявленных методов не помечен как принадлежащий этому классу. Вы написали их так, как если бы они были отдельными методами, независимыми от какого-либо класса. Чтобы указать, что они принадлежат классу sv1, вам необходимо добавьте «sv1 ::» в начало имени метода.
Я думаю, что вы преследуете неправильный шаблон. Почему вы определили структуру Node внутри приватной секции класса!? Обычный шаблон заключается в том, что вы должны разделить классы для самого Node и LinkedList. Пожалуйста, создайте другой класс, который инкапсулирует ваш узел. Также вы можете реализовать это с помощью шаблонов для поддержки различных типов данных.
Также head
является внутренней переменной Вы не должны принимать это как аргумент функции. Это не объектно-ориентированный, потому что ваш связанный список (если он работает) не согласован и все определяющие переменные открыты для изменения. Вы должны сделать head
личное для LinkedList. Здесь вы можете найти несколько примеров: