所以我知道我根据纯粹主义者做了一些非常错误的事情,它继承自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 声明。
答案 0 :(得分:4)
为什么我不能将命名空间放在父类构造函数调用中?
你可以,你应该。但是您需要指定基类的模板参数:
Matrix::Matrix(size_type n, const value_type& val): std::vector<std::vector<double>>(n, val)
// ^^^^^^^^^^^^^^^^^^^^^
您不应该公开派生自std::vector
,但您已经知道了。