我希望创建TemplateClassB
的实例,使其私有tcA
是TemplateClassA
的{{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>
答案 0 :(得分:1)
我认为你的问题在于:
TemplateClassA<> tcA;
将其更改为:
TemplateClassA<1> tcA;
答案 1 :(得分:1)
TemplaceClassB :: tcA的类型为TemplateClassA&lt; 5&gt;
初始声明时,您尝试将其初始化,就像它是TemplateClassA&lt; 1&gt;
一样答案 2 :(得分:1)
tcA
是TemplateClassA<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
};
您需要编写类型转换函数或使tcA
与TemplateClassA<1>
类型相同
这是:
TemplateClassA<L> tcA; // L is 1 now
// ^^^