C++ vector 模板参数 1 无效

标签 c++ templates vector reference

我在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/

相关文章:

c++ - 在 C/C++ 中分配和访问矩阵

c++ - 计算两个 uint8_t 变量之间差异的最快方法是什么?

c++ - 为什么这段代码没有生成所有排列?

c++ - 从两个 vector 创建 map

c++ - "Empty base optimization"用于 lambda 捕获 - 被标准禁止?为什么?

templates - CUDA和内核包装程序以及模板和编译错误

c++ - 任何元编程方法可以为各种数量的模板参数生成重载?

c++ - 如何将一串整数转换为一个充满整数的 vector ?

c++ - EASTL vector-design on size() 方法

django - 如何在 Django 模板上使用 if/else 条件?