继承 std::vector 时出错

Posted

技术标签:

【中文标题】继承 std::vector 时出错【英文标题】:Error while inheriting std::vector 【发布时间】:2015-04-01 08:53:42 【问题描述】:

我正在尝试定义一个从 std::vector 类继承的类。下面是代码

 template<class t>
 class Vector:vector<t>
 
   public:
    using vector<t>::vector;
 ;

 int main(int argc, char *argv[])
 
    Vector<int> v;
    return 0;
 

我收到这样的错误:

   "error: 'std::vector<t, std::allocator<_CharT> >::vector' names constructor"

所以基本上我想知道为什么我的程序失败了,以及从父 std::vector 类继承的类中要重载的所有程序。

提前致谢。

【问题讨论】:

std::vector 继承时,请注意它不必定义虚拟析构函数。因此,从它继承通常不是一个好主意。 @Bathsheba 这是私有继承,所以我怀疑缺少虚拟析构函数是否重要。 @KeillRandor public 在这里不相关。 @tobi303 大概你的意思是虚拟析构函数?没有虚拟构造函数这样的东西。 @tobi303 有些人认为私有继承组合。 【参考方案1】:

我试过了:

 #include <vector>

 template<class t>
 class Vector: std::vector<t>
 
    public:
        using std::vector<t>::vector;
 ;

 int main()
 
    Vector<int> v;
    return 0;
 

当传递标志 -std=c++11 时,它在 gcc 4.8. 上运行良好。

听起来你的编译器无法弄清楚你想用using 指令完成什么。由于继承构造函数是 C++11 的一项特性,我建议您确保您在 C++11 模式下运行编译器

【讨论】:

有时候你不能改变你的编译器,所以你必须想办法让代码适应编译器

以上是关于继承 std::vector 时出错的主要内容,如果未能解决你的问题,请参考以下文章

初始化具有大小的对象向量时出错

尝试取消引用 2D 矢量中的元素时出错

在 C++ 向量中存储指针时出错

使用 memcpy 时出错:“访问冲突读取位置 0x0000000000000000”

从 std::vector 继承时 g++ 7 中的未定义引用

如何将 char* 转换为 std::vector?