如何实现返回受保护结构的私有函数

时间:2018-09-23 22:28:35

标签: c++

所以我想做的是我想要一个类LinkedList,并且在头文件中,我有一个受保护的结构ListNode,该结构具有字符串值参数和一个指向下一个节点的指针。在我的公共成员函数中,我有一个add函数,该函数调用递归的私有add函数。
这是H文件。

#ifndef LINKEDLIST_H_INCLUDED
#define LINKEDLIST_H_INCLUDED
#include <iostream>
using namespace std;
class LinkedList
{
protected:   // Declare a class for the list node.
struct ListNode
{
   string value;
   ListNode *next;
   ListNode(string value1, ListNode *next1 = NULL)
   {
      value = value1;
      next = next1;
   }
};
ListNode *head;                  // List head pointer
public:
    LinkedList() { head = NULL; }   // Constructor
    ~LinkedList();                  // Destructor
    void add(string value) { head = add(head, value);}
private:
    // Recursive implementations
    ListNode *add(ListNode *aList, string value);   //Function called by the void add function in public
};
#endif // LINKEDLIST_H_INCLUDED

当我尝试实现此递归添加功能时,就会出现问题。我已经尝试了下面的代码,但是我仍然收到 ListNode没有类型的错误。即使我已将其定义为受保护的属性?
这是实施文件。

#include "LinkedList.h"
//Destructor works fine, nothing wrong here and we are using ListNode
LinkedList::~LinkedList()
{    ListNode *garbage;
    head = garbage;
    delete garbage;
}
//Error comes from this recursive add function
ListNode LinkedList::*add(ListNode *aList, string val)
{
    //add a node recursively
}

非常感谢我需要更改的任何内容。

(注)如果您需要更多信息,我很乐意将其发布。我只想要一些帮助。谢谢!

2 个答案:

答案 0 :(得分:3)

LinkedList::ListNode* LinkedList::add(ListNode *aList, string val)

由于ListNode*是在类声明中声明的,因此您需要像LinkedList那样适当定义@font-face{ font-family:'Adobe Garamond Pro Bold'; src:url(../fonts/AGaramondPro-Bold.eot); src:url(../fonts/AGaramondPro-Bold.eot?#iefix) format('embedded-opentype'),url(../fonts/AGaramondPro-Bold.woff) format('woff'),url(../fonts/AGaramondPro-Bold.ttf) format('truetype'),url(../fonts/AGaramondPro-Bold.svg#3ba63f82a1b13c399d199d455e95ce26) format('svg'); font-style:normal; font-weight:700 } @font-face{ font-family:'Adobe Garamond Pro Bold'; src:url(../fonts/AGaramondPro-BoldItalic.eot); src:url(../fonts/AGaramondPro-BoldItalic.eot?#iefix) format('embedded-opentype'),url(../fonts/AGaramondPro-BoldItalic.woff) format('woff'),url(../fonts/AGaramondPro-BoldItalic.ttf) format('truetype'),url(../fonts/AGaramondPro-BoldItalic.svg#fc87d529a9b2a903681f36cd7c9d9a39) format('svg'); font-style:italic; font-weight:700 } @font-face{ font-family:'Adobe Garamond Pro'; src:url(../fonts/AGaramondPro-Italic.eot); src:url(../fonts/AGaramondPro-Italic.eot?#iefix) format('embedded-opentype'),url(../fonts/AGaramondPro-Italic.woff) format('woff'),url(../fonts/AGaramondPro-Italic.ttf) format('truetype'),url(../fonts/AGaramondPro-Italic.svg#e62a4d531f55b2f8bdfd398331ec8604) format('svg'); font-style:italic; font-weight:400 } @font-face{ font-family:'Adobe Garamond Pro'; src:url(../fonts/AGaramondPro-Regular.eot); src:url(../fonts/AGaramondPro-Regular.eot?#iefix) format('embedded-opentype'),url(../fonts/AGaramondPro-Regular.woff) format('woff'),url(../fonts/AGaramondPro-Regular.ttf) format('truetype'),url(../fonts/AGaramondPro-Regular.svg#1eabc8b27c1d378ed9b1f5dd58b5095c) format('svg'); font-style:normal; font-weight:400 } :root{ --base-font-weight:400; --base-font-size:22px/1.62; --sys-font-family:"Adobe Garamond Pro","Georgia","Times New Roman",Times,serif; --zh-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Droid Sans","Helvetica Neue","PingFang SC","Hiragino Sans GB","Droid Sans Fallback","Microsoft YaHei",sans-serif; --sub-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Droid Sans","Helvetica Neue","PingFang SC","Hiragino Sans GB","Droid Sans Fallback","Microsoft YaHei",sans-serif; --base-font-family:var(--sys-font-family),var(--zh-font-family); --code-font-family:Menlo,Monaco,Consolas,"Courier New"; --base-color:#444443; --emphasis-color:#222223; --link-color:#0985ce; --link-hover-color:#0985ce; --figure-color:#666665; --blockquote-color:#666664; --code-color:#808080; --pre-code-color:#4c4c4c } 的范围。

答案 1 :(得分:1)

类型为ListNode,而不是ListNode。因为上下文很清楚,所以在LinkedList类及其方法中仅使用LinkedList::ListNode* LinkedList::add(ListNode* aList, string val) { //... } 可以正常工作,但是一旦您不在上下文中,则必须编写完整类型。

这应该有效:

count