【发布时间】:2020-01-08 22:24:55
【问题描述】:
我有一个复制 linux shell 命令(ls、mkdir 等)的任务,所以我使用的是通用树结构。基本上,目录类有一个指向基类(文件)或另一个派生类(目录)的指针向量。每当我尝试 push_back 一个指向新目录的唯一指针时,都会出现以下错误。
/usr/include/c++/8/ext/new_allocator.h:136:4: error: no matching function
for call to ‘std::unique_ptr<FileData*>::unique_ptr(std::unique_ptr<Directory,
std::default_delete<Directory> >)’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是我的代码
#include "FileData.h"
#include <vector>
#include <cctype>
#include <memory>
class Directory : public FileData
{
private:
Directory * parent;
std::vector<std::unique_ptr<FileData*>> files;
void eraseString(std::string & mainString,
const std::string & stringToErase);
int amountOfChar(const std::string & check);
public:
Directory();
Directory(Directory * par);
~Directory();
Directory(const Directory & x);
void listComputerFiles(std::string input);
void changeDirectory(std::string input);
void makeDirectory(std::string input);
void removeDirectory(std::string input);
void makeFile(std::string input);
void removeFile(std::string input);
void printCurrentDirectory();
};
class FileData
{
friend class Directory;
protected:
std::string name;
std::string restrictions;
std::string timestamp;
std::string owner;
std::string group;
int dataSize;
int numberOfItems;
public:
FileData();
FileData(std::string nameOfFile, std::string restrict, std::string time,
std::string own, int size, int itemNumber);
virtual ~FileData();
};
这是错误发生的地方
files.emplace_back(std::make_unique<Directory>(new Directory(*this)));
我尝试了许多来自其他有类似问题的用户的不同组合,但无济于事,包括使用 shared_ptr。正如您可能知道的那样,我没有使用智能指针的经验,但感觉在这种情况下使用它们很有帮助,因为要清理嵌套目录让人望而生畏。
【问题讨论】:
标签: c++11 inheritance smart-pointers