类中的链表,应通过类中的函数调用

Posted

技术标签:

【中文标题】类中的链表,应通过类中的函数调用【英文标题】:Linked list in a class and should be called through a function from the class 【发布时间】:2012-09-07 07:56:42 【问题描述】:

这是头文件

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

【问题讨论】:

老兄,很好的编辑回滚。不喜欢缩进? 【参考方案1】:

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

    本地 参数 类成员(继承或其他) 全球(但是,请认为这是一个禁忌)

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

【讨论】:

q_folder 中的 head 应该第一次表示 Null,然后每次我再次调用 insert 时它应该代表上一个文件夹.. 对不起,我错过了在所有成员函数中输入 sv1::。 此外,我还从同一类的其他一些函数中多次调用 q_folder。那么我怎样才能得到一个完美的链表呢? 好的,我发现我应该在类中公开声明节点头:无论如何谢谢:) @Pcmsr,如果我可以给你一些建议的话。如果你真的想获得一些实际的编程经验,你应该抽象接口,这样你就不必知道如何它是如何实现的。换句话说,你有方法“add”和“remove”,它们只接受字符串,而你的实现会处理细节。【参考方案2】:

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

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

Simple C/C++ Linked List

How to create Linked list using C/C++

【讨论】:

以上是关于类中的链表,应通过类中的函数调用的主要内容,如果未能解决你的问题,请参考以下文章

C++ 节点类、链表、LIFO、FIFO

如何通过调用类中的函数来创建线程? [重复]

泛型集合类中的链表类随机产生100个有序整数(单词)的链表

泛型集合类中的链表类随机产生100个有序整数(单词)的链表

泛型集合类中的链表类随机产生100个有序整数(单词)的链表

c中的链表返回负数而不是添加节点