65,186
社区成员




template <typename T>
class A {
public:
A<T>(); /******在模板类的内部, 就可以加上模板参数******/
};
template <typename T>
A<T>::A() /******就是这一行******/
{
std::cout << "I am constructor A() outside class\n";
}
A<T>::A<T>()
error: ‘A<T>::A’ names the constructor, not the type
A<T>::A<T>()
^
error: and ‘A<T>’ has no template constructors
template <typename T>
A<T>::A() {}
省略了模板类型, 这是正确的. 但是
template <typename T>
A<T>::A<T>()
没有省略模板类型, 却是错误的, 在模板类内不省略却是正确的(1L代码第4行). 这是为什么呢? [/quote]
构造函数后面的<T>不是省略,是不能加。
template <typename T>
A<T>::A()
{
std::cout << "I am constructor A() outside class\n";
}
你这个template只是为了对应你的类,类内不需要再次声明模板类型。template <typename T>
A<T>::A() {}
省略了模板类型, 这是正确的. 但是
template <typename T>
A<T>::A<T>()
没有省略模板类型, 却是错误的, 在模板类内不省略却是正确的(1L代码第4行). 这是为什么呢?