C ++没有合适的默认构造函数 - 继承模板化构造函数,没有参数

时间:2013-04-07 19:57:17

标签: c++ templates inheritance

我已经查看了十几个qst的短语no appropriate default constructor available,但没有帮助我自己的问题。

这是一个非常基本的C ++ qst(因为我还在学习绳索),所以如果你的眼睛盯着它的简单,请提前抱歉。我试图继承一个没有参数的模板化构造函数的类。如:

class Base {
public:

template<class T>
Base() {
  T *t = this;
  //more irrelevant stuff
}

}

我试过

class Derived : public Base {
public:
  Derived() : Base() {

  }
}

class Derived : public Base {
public:
  Derived() {

  }
}

无济于事。在这两种情况下,我都会收到错误消息no appropriate default constructor available。怎么去做这个?如果这是不可能的,你能解释一下原因吗?

当我设置像template<class T> Base(T *t)这样的构造函数时(将模板参数作为参数),它可以工作。

P.S。如果它很重要,我的代码中我也会继承另一个类的Derived

1 个答案:

答案 0 :(得分:0)

中没有访问默认构造函数的语法
class blah_t
{
public:
    template< class other_t > blah_t() {}
};

还有一些其他方法可以使默认构造函数不可访问,例如

class blah_t
{
public:
    blah_t() {}
    blah_t( int = 666 ) {}
};

正如圣标所解释的那样,建造者没有名字......

但是,回到原来的问题,为了能够指定模板参数,你需要一些涉及模板参数类型的普通函数参数