当前位置:  开发笔记 > 编程语言 > 正文

c ++矢量模板参数1无效

如何解决《c++矢量模板参数1无效》经验,为你挑选了1个好方法。

我写了一File堂课File.h.我编写了Directory类,Directory.h其中包含File&vector.两个头具有相同的命名空间

这是代码:

#include "File.h" 
#include 

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

LogicStuff.. 6

为了清理你的东西,std::vector要求它的元素是CopyAssignable,而不是哪些引用.

std::vector是一个引用的向量File,请注意这std::vector<(File&)>是一个语法错误.

你认为std::vector &会工作,但没有.它是对什么载体的引用?对象.多态性在那里不起作用.而且你需要一个实际的std::vector实例来引用.

您需要一个指针向量,可以进行复制分配.

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

std::vector> files;
// or
std::vector> files;

参考:std::shared_ptr,std::unique_ptr.



1> LogicStuff..:

为了清理你的东西,std::vector要求它的元素是CopyAssignable,而不是哪些引用.

std::vector是一个引用的向量File,请注意这std::vector<(File&)>是一个语法错误.

你认为std::vector &会工作,但没有.它是对什么载体的引用?对象.多态性在那里不起作用.而且你需要一个实际的std::vector实例来引用.

您需要一个指针向量,可以进行复制分配.

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

std::vector> files;
// or
std::vector> files;

参考:std::shared_ptr,std::unique_ptr.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有