Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无限子树的递归函数。c++;_C++_Recursion_Tree_Filesystems - Fatal编程技术网

C++ 无限子树的递归函数。c++;

C++ 无限子树的递归函数。c++;,c++,recursion,tree,filesystems,C++,Recursion,Tree,Filesystems,我创建了一个虚拟文件系统,用来模拟硬盘驱动器。我遇到的问题是,当我格式化这个“驱动器”时,我需要遍历每个文件夹和子文件夹,删除我创建的“文件”,然后删除文件夹而不会出现内存泄漏:) 我已经做了几个小时了,我试着做递归函数,但它不会删除所有内容。它总是卡在某个地方:( 任何想法都会使我的一周愉快!!谢谢 下面是myfolder.h和递归函数的代码示例 文件夹.h: #ifndef FOLDER_H #define FOLDER_H #include <iostream> #includ

我创建了一个虚拟文件系统,用来模拟硬盘驱动器。我遇到的问题是,当我格式化这个“驱动器”时,我需要遍历每个文件夹和子文件夹,删除我创建的“文件”,然后删除文件夹而不会出现内存泄漏:) 我已经做了几个小时了,我试着做递归函数,但它不会删除所有内容。它总是卡在某个地方:(

任何想法都会使我的一周愉快!!谢谢

下面是myfolder.h和递归函数的代码示例

文件夹.h:

#ifndef FOLDER_H
#define FOLDER_H
#include <iostream>
#include <string>
#include "file.h"
using namespace std;
class folder
{
private:
    int CAP = 10;

    int nrOfChildFolders;
    int nrOfFiles;
    string folderName;
    folder * parentFolder;
    folder * childFolder[10];
    file * fileArray[10];



public:
    folder();
    folder(string folderName, folder * parent);
    ~folder();
    void addFolder(string folderName);
    void addFile(string fileName, int nr);
    string getFolderAndFiles()const;
    string getFolderName()const;
    int getFileNr(string fileName)const;
    void reset();
    folder * getFolder(string name)const; 
    folder * getParentFolder()const;
    void deleteFile(string name, int nr);
    folder * getChildFolder(int pos);
    int getNrOfChildFolders()const;

    /* data */
};
#endif
\ifndef文件夹
#定义文件夹
#包括
#包括
#包括“file.h”
使用名称空间std;
类文件夹
{
私人:
int CAP=10;
国际儿童基金会;
国际办公室;
字符串folderName;
文件夹*父文件夹;
文件夹*childFolder[10];
file*fileArray[10];
公众:
文件夹();
文件夹(字符串folderName,文件夹*父文件夹);
~folder();
void addFolder(字符串folderName);
void addFile(字符串文件名,整数编号);
字符串getFolderAndFiles()常量;
字符串getFolderName()常量;
int getFileNr(字符串文件名)常量;
无效重置();
文件夹*getFolder(字符串名称)常量;
文件夹*getParentFolder()常量;
void deleteFile(字符串名称,整数编号);
文件夹*getChildFolder(int pos);
int getNrOfChildFolders()常量;
/*资料*/
};
#恩迪夫
递归函数:

void FileSystem::recursiveFolderSwitcher(folder * newCurrentFolder) 
{
    int folders = newCurrentFolder->getNrOfChildFolders();
    if (newCurrentFolder->getNrOfChildFolders() != 0)
    {
        for (int i = 0; i < folders; i++) 
        {
            newCurrentFolder = newCurrentFolder->getChildFolder(i);
            recursiveFolderSwitcher(newCurrentFolder);
        }
    } 
    newCurrentFolder->reset(); 
}
void FileSystem::recursiveFolderSwitcher(文件夹*newCurrentFolder)
{
int folders=newCurrentFolder->getNrOfChildFolders();
如果(newCurrentFolder->getNrOfChildFolders()!=0)
{
对于(int i=0;igetChildFolder(i);
递归FolderSwitcher(newCurrentFolder);
}
} 
newCurrentFolder->reset();
}

感谢您在for循环中重新分配
newCurrentFolder

newCurrentFolder = newCurrentFolder->getChildFolder(i);
这就是决赛

newCurrentFolder->reset()
而是重置最后一个子项

使用

相反

是不必要的,for语句将为您处理此问题

folder* child = newCurrentFolder->getChildFolder(i);
recursiveFolderSwitcher(child);
if (newCurrentFolder->getNrOfChildFolders() != 0)