为什么我不能在父类构造函数调用中放置命名空间?

时间:2013-07-11 06:31:31

标签: c++ inheritance constructor namespaces

所以我知道我根据纯粹主义者做了一些非常错误的事情,它继承自std :: vector,但我想添加非常具体的功能,我认为这些功能作为矢量的孩子很有意义。 无论如何,这不是我的主要关注点。

我有我的班级:

class A : public std::vector<std::vector<double>>
{
public:
    A(size_type n, const value_type& val);
    ... other moethods ...
};

我不明白的是,在构造函数中,为什么:

Matrix::Matrix(size_type n, const value_type& val):
    vector(n, val)
{
}

工作,如果我把:

Matrix::Matrix(size_type n, const value_type& val):
    std::vector(n, val)
{
}

它不会编译? (使用GCC-4.8)我的代码中没有使用命名空间std 声明。

1 个答案:

答案 0 :(得分:4)

  

为什么我不能将命名空间放在父类构造函数调用中?

你可以,你应该。但是您需要指定基类的模板参数:

Matrix::Matrix(size_type n, const value_type& val): std::vector<std::vector<double>>(n, val)
//                                                             ^^^^^^^^^^^^^^^^^^^^^

您不应该公开派生自std::vector,但您已经知道了。