1

所以我知道根据纯粹主义者的说法,我做错了一些事情,这是从 std::vector 继承的,但我想添加非常具体的功能,我认为这些功能作为 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)我的代码中没有using namespace std声明。

4

1 回答 1

4

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

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

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

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

于 2013-07-11T06:37:16.217 回答