You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:15:04