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的要点。尽管存在关系,但智能指针与指针是不同的。