c++向量模板参数1无效
Posted
技术标签:
【中文标题】c++向量模板参数1无效【英文标题】:c++ vector template argument 1 is invalid 【发布时间】:2015-12-19 11:52:19 【问题描述】:我在File.h
中写了一个File
类。我在Directory.h
中编写了目录类,其中包含File&
向量。两个标头具有相同的命名空间。
代码如下:
#include "File.h"
#include <vector>
class Directory : public File
public:
...
private:
std::vector<(File&)> files;
;
当我尝试编译它时,它说:
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
【问题讨论】:
您不能拥有std::vector
的引用类型。类型必须是可复制的。有什么理由不使用std::vector<File>
?
那我应该使用指针吗?谢谢。
你需要它们吗?多态性?
不,它不会工作。最好是有智能指针向量。
你错过了 LogicStuff 的观点。虽然存在关系,但智能指针与指针不同。
【参考方案1】:
为了让你明白,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;
参考:std::shared_ptr
,std::unique_ptr
。
【讨论】:
以上是关于c++向量模板参数1无效的主要内容,如果未能解决你的问题,请参考以下文章