如何在C ++中使用类模板启动类构造函数?

时间:2014-03-22 03:23:45

标签: c++ class templates

我希望创建TemplateClassB的实例,使其私有tcATemplateClassA的{​​{1}}实例。该程序产生错误:L =1

如果我将TemplateClassB更改为no matching function for call to 'TemplateClassA<>::TemplateClassA(TemplateClassA<1>)' : tcA(TemplateClassA<L>(2)){,则没有错误。为什么?怎么解决这个问题?

template <typename E, typename F, int L=5>

3 个答案:

答案 0 :(得分:1)

我认为你的问题在于:

TemplateClassA<> tcA;

将其更改为:

TemplateClassA<1> tcA;

答案 1 :(得分:1)

TemplaceClassB :: tcA的类型为TemplateClassA&lt; 5&gt;

初始声明时,您尝试将其初始化,就像它是TemplateClassA&lt; 1&gt;

一样

答案 2 :(得分:1)

tcATemplateClassA<5> and you are trying to assign TemplateClassA(2)`,它们是不同的类型。

template <typename E, typename F, int L=1>
class TemplateClassB {
public:
  typename TemplateClassA<L>::TypeA var;   

  TemplateClassB()
    : tcA(TemplateClassA<L>(2)){  // here L is 2
  }

  TemplateClassA<> tcA;  // by default L=5
}; 

您需要编写类型转换函数或使tcATemplateClassA<1>类型相同 这是:

TemplateClassA<L> tcA;  // L is 1 now
//            ^^^