0

这是头文件

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 中声明头。是什么原因造成的,我该如何解决?

4

2 回答 2

5

在您的方法 q-folder 中,您使用“&head”调用 insertAfter。在任何类方法中可以识别 head 的唯一方法是,如果它是

  1. 当地的
  2. 范围
  3. 类成员(继承或其他)
  4. 全球(但是,认为这是一个禁忌)

看它怎么都不是这三个,它不知道你说的“&head”是什么意思。另外,正如提到的 hmjd 更正,您声明的方法都没有被标记为属于该类。您将它们编写为独立于任何类的独立方法。为了表明它们属于类 sv1,您需要在方法名称的开头添加“sv1::”。

于 2012-09-07T07:59:56.813 回答
0

我认为你追求的是错误的模式。为什么你在类的私有部分定义节点结构!?通常的模式是您必须为 Node 和 LinkedList 本身分离类。请创建另一个封装您的节点的类。您也可以使用模板来实现它以支持不同的数据类型。

也是head一个内部变量。您不应该接受它作为函数参数。这不是面向对象的,因为您的链表(如果有效)不一致,并且所有定义变量都可以更改。您需要head将 LinkedList 设为私有。在这里你可以找到一些例子:

简单的 C/C++ 链表

如何使用 C/C++ 创建链表

于 2012-09-07T08:41:19.397 回答