C++模板类构造函数指定模板参数触发编译错误的原因是什么
问题原因分析
这个编译错误是因为你在模板类内部声明构造函数时,错误地给构造函数名添加了显式模板参数列表<T>。
在类模板的定义作用域内,Test是注入类名(injected class name),会自动代指当前实例化的Test<T>类型,构造函数的名称要求使用非限定的类名,不允许额外附加模板参数后缀。
修复方案
直接去掉构造函数名后的<T>即可正常编译:
template <class T> class Test { Test() = default; };
补充说明
- 只有在类外定义模板类的构造函数时,才需要在类名后加模板参数列表,写法为:
template <class T> Test<T>::Test() = default; - 该语法规则在所有C标准版本中通用,和你使用的C20、g++ 11.2编译环境没有关联。
内容的提问来源于stack exchange,提问作者peter
相关产品推荐
相关产品推荐

