【问题标题】:Why can't I put namespace in parent class constructor call?为什么我不能将命名空间放在父类构造函数调用中?
【发布时间】:2013-07-11 06:31:31
【问题描述】:

所以我知道根据纯粹主义者的说法,我做错了什么,这是从 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 声明。

【问题讨论】:

  • 它需要构造函数的名称,而不是类型。
  • 发布一个可重现错误的独立代码示例。
  • 你不应该真的从 std::vector 派生。改为成为会员。
  • 如果你必须从 std::vector 继承,我可以推荐私有继承而不是公共继承吗?
  • 但是我在代码的其他地方使用了vector的标准操作(push_back等...)(注意:这只是用于原型设计,不是生产代码)

标签: c++ inheritance constructor namespaces


【解决方案1】:

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

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

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

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

【讨论】:

  • 好吧,我太笨了。谢谢!
猜你喜欢
  • 2016-03-16
  • 2011-09-07
  • 1970-01-01
  • 2015-04-24
  • 2010-10-17
  • 2020-03-06
  • 2014-07-26
  • 1970-01-01
  • 2015-11-13
相关资源
最近更新 更多