解决C2143语法错误: 缺少“;”(在“<end Parse>”的前面)

最近在编译一个程序时出现了一个很奇葩的编译错误,错误代码为C2143,错误说明为“语法错误: 缺少“;”(在“<end Parse>”的前面)”。看到这个错误我就卧槽了,<end Parse>是什么鬼?编译器提示错误位置在第2054行,而对应源文件的总行数只有2053行,这个2054行是从哪冒出来的?一开始我以为是文件中有特殊字符,把大量代码删除之后却编译成功,于是我怀疑是代码问题。我使用注释大法逐一进行编译测试,发现问题所在:

问题代码长得像这样子,在visual studio 2015下出现编译错误:

template<typename t> class C {
public:
	C(int) {}
	static C c;
};
template<typename t> C<t> C<t>::c{1};
int main() {
	C<int>::c;//C2143
}

要再现这个错误需要具备2个条件:

  • 模板类的静态成员变量使用花括号初始化
  • 实例化模板

解决问题的方法很简单,把初始化改用圆括号即可。

template<typename t> const C<t> C<t>::c(1);



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值