我在File.h
中写了一个File
类。我在 Directory.h
中编写了 Directory 类,其中包含 File&
vector 。两个 header 具有相同的命名空间。
代码如下:
#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
要求其元素为 CopyAssignable ,哪些引用不是。
std::vector<File&>
是对 File
的引用 vector , 请注意 std::vector<(File&)>
是语法错误。
你以为std::vector<File> &
会工作,但没有。它是对什么 vector 的引用?对象。多态性在那里不起作用。你需要一个实际的 std::vector<File>
要引用的实例。
您需要一个指针 vector ,可以复制分配。
如果你使用原始指针,你不需要忘记 delete
在你删除任何元素之前,否则你会泄漏内存(当然,如果一个对象是在堆上分配的)。智能指针将为您做到这一点:
std::vector<std::shared_ptr<File>> files;
// or
std::vector<std::unique_ptr<File>> files;
引用: std::shared_ptr
, std::unique_ptr
.
关于C++ vector 模板参数 1 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370398/