0

我希望在 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'
} 

我怎样才能解决这个问题?

4

5 回答 5

3

试试这个

A<> a(b);
A<5> a(b);
于 2013-05-09T18:14:09.257 回答
1

仅仅因为它是一个模板类不会改变初始化语法:

  A<5> a(b);

使用默认参数:

  A<> a(b);
于 2013-05-09T18:13:55.927 回答
1

尝试 A<> a(b); 获取默认值。

于 2013-05-09T18:15:36.713 回答
1

你的类定义后需要一个分号。

于 2013-05-09T18:22:57.890 回答
0

A是一个模板,因此无论是否提供了默认值,您都必须提供模板括号。

A<> a(b);

如果您不想使用模板括号,可以使用typedef声明来避免它:

typedef A<> X;

您遇到的其他错误是由于您没有以分号结束类定义。

这是一个工作程序——http: //ideone.com/occE71#view_edit_box

于 2013-05-09T19:13:49.950 回答