我希望在A类中使用具有默认参数l
的模板,但该程序会产生错误:
class B {
public:
B(){
...
}
}
template <int l = 1>
class A {
public:
A(const B& b){
...
}
}
int main(){
B b;
A(b) a; // error: missing template arguments before '(' token
A<5>(b) a; // error: expected ';' before 'a'
}
我该如何解决这个问题?
答案 0 :(得分:3)
试试这个
A<> a(b);
A<5> a(b);
答案 1 :(得分:1)
仅仅因为它是一个模板化的类不会改变初始化语法:
A<5> a(b);
使用默认参数:
A<> a(b);
答案 2 :(得分:1)
尝试 A&LT;&GT; A(B); 获得默认值。
答案 3 :(得分:1)
你的课程定义后需要一个分号。
答案 4 :(得分:0)
A
是一个模板,因此无论是否提供默认值,您都必须提供模板括号。
A<> a(b);
如果您不想使用模板括号,可以使用typedef
声明来避免它:
typedef A<> X;
您遇到的其他错误是由于您未使用分号结束类定义。
这是一个有效的工作程序 - http://ideone.com/occE71#view_edit_box