遇到个问题 ,先描述下情况,
昨晚能编译通过,但偶尔出现崩溃,今早准备找下错误点,结果报这个,闻所未闻:
“错误 C2280 “TRoleObj::TRoleObj(void)”: 尝试引用已删除的函数”
百度了一大堆,和我的问题都不一样,而且昨晚都能编译通过能运行的!
最后自己审查代码才发现错误,给结构体里常量赋值了!
然后去掉const关键字,编译通过了,然后又加上const,惊奇的发现报错变两个了,而且准确了:
错误 C3892 “tRoleObj”: 不能给常量赋值 //【卧槽~早这么准我就不会为此浪费时间了嘛- -!哎】
错误 C2280 “TRoleObj::TRoleObj(void)”: 尝试引用已删除的函数
那么问题来了!
为什么会出现同一个错误两种报错?而且昨天还没报今天却报?
应该与编译器查错机制有关,它应该又两种审查,第一,局部修改的代码审查,就是刚写的修改的代码审查下,报错就准确;第二就是全局代码的审查,报错就不准确,而且这个全局审查应该不是时时刻刻的,这就是解释了同样代码昨天能通过编译,今天就不行了,因为今天全局查错。
结论:
全局查错的时候,编译器可能报错不准确(给常量赋值第一次给我报 “尝试引用已删除的函数”)
所以有时候不能完全依赖编译器
要避免再次发生同样的事情,谨记,提升编程功底,时常仔细认真,不犯基础错误为妙。
2021-2-6小计。