error C3646未知重写说明符
一次写代码的时候VS2017报了这个错误,而且后面跟了一大堆错,在网上找了一会解决方案,可是不仅没有解决问题,甚至连错在哪都没弄明白。后来我Google了一下,通俗来说,编译器在希望找到重写标识符的位置找到了无法识别的说明符,但这是常见的错误情况,我报错的行就只有一句简单的字符串声明string name;
,死活不知道为什么会报这个错误。
后来看到官方在解释部分的一句话:如果无法识别说明符,请将其替换成关键字。(附带原文地址:https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c3646?view=vs-2019)
看到这里我想我明白了,很显然是编译器没找到string这个关键字,这样问题就迎刃而解了,我在文件头部添加了using namespace std;
,C++中自定义之外的所有标识符和关键字都在这个命名空间,添加这一句之后编译器才能认识关键字string。
没有与这些操作数匹配的"<<"运算符
此外,还有其他类似的错误,比如在写输出语句的时候碰到这样的错误:没有与这些操作数匹配的"<<"运算符
后来发现是没有加#include <string>
,后来才知道,不输出临时字符串的话就不会报错,在输出临时字符串的时候编译器默认定义了字符串输出流string buf,这里用到了关键字string,编译器无法识别,所以就会报错,加上对应的预处理命令就不会报错了。
总结一下,编译器在简单声明或者定义语句行报错的话,首先排除没有明显的单词拼写错误和符号错误,其次再排除是否正确添加需要的预处理命令和命名空间语句,如果编译器依旧报错的话,就需要仔细找问题了。