C++ c++;向量模板参数1无效

C++ c++;向量模板参数1无效,c++,templates,vector,reference,C++,Templates,Vector,Reference,我在File.h中编写了一个File类。我在Directory.h中编写了目录类,它是include文件&向量。两个标头具有相同的命名空间 代码如下: #include "File.h" #include <vector> class Directory : public File { public: ... private: std::vector<(File&)> files; }; #包括“File.h” #包括 类目录:公共文件

我在
File.h
中编写了一个
File
类。我在
Directory.h
中编写了目录类,它是include
文件&
向量。两个标头具有相同的命名空间

代码如下:

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

class Directory : public File
{
public:
    ...

private:
    std::vector<(File&)> files; 
};
#包括“File.h”
#包括
类目录:公共文件
{
公众:
...
私人:
std::矢量文件;
};
当我试图编译它时,它说:

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
目录中包含的文件中的
。cpp:1:0:
Directory.h:29:30:错误:模板参数1无效
std::矢量文件;
^
Directory.h:29:30:错误:模板参数2无效

要为您清理问题,要求其元素为,而引用不是

std::vector
是对
文件的引用向量,请注意
std::vector
是语法错误

你以为
std::vector&
行得通,但是不行。这是对什么向量的引用?物体。多态性在那里不起作用。您需要一个实际的
std::vector
实例来引用

您需要一个指针向量,它可以被复制分配

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

std::vector<std::shared_ptr<File>> files;
// or
std::vector<std::unique_ptr<File>> files;
std::矢量文件;
//或
std::矢量文件;

引用:,.

您不能有引用类型的
std::vector
。该类型必须是可复制的。为什么不使用
std::vector
?那么我应该使用指针?谢谢你,你需要它们吗?多态性?不,它不起作用。最好是有智能指针向量。你错过了LogicStuff的要点。尽管存在关系,但智能指针与指针是不同的。