c ++矢量模板参数1无效

2 c++ templates reference vector

我写了一File堂课File.h.我编写了Directory类,Directory.h其中包含File&vector.两个头具有相同的命名空间

这是代码:

#include "File.h" 
#include <vector>

class Directory : public File
{
public:
    ...

private:
    std::vector<(File&)> files; 
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,它说:

In file included from Directory.cpp:1:0:
Directory.h:29:30: error: template argument 1 is invalid
         std::vector<(File&)> files; 
                              ^
Directory.h:29:30: error: template argument 2 is invalid
Run Code Online (Sandbox Code Playgroud)

Log*_*uff 6

为了清理你的东西,std::vector要求它的元素是CopyAssignable,而不是哪些引用.

std::vector<File&>是一个引用的向量File,请注意这std::vector<(File&)>是一个语法错误.

你认为std::vector<File> &会工作,但没有.它是对什么载体的引用?对象.多态性在那里不起作用.而且你需要一个实际的std::vector<File>实例来引用.

您需要一个指针向量,可以进行复制分配.

如果你使用原始指针,delete在删除任何元素之前你不必忘记,否则你将泄漏内存(当然,如果在堆上分配了一个对象).智能指针将为您做到这一点:

std::vector<std::shared_ptr<File>> files;
// or
std::vector<std::unique_ptr<File>> files;
Run Code Online (Sandbox Code Playgroud)

参考:std::shared_ptr,std::unique_ptr.