问题简述
今天在跑别人的Qt程序时遇到了问题,编译时报了如下这些错误:
error: C2001: 常量中有换行符
error: C2062: 意外的类型“bool”
error: C2065: “flag”: 未声明的标识符
error: C2143: 语法错误: 缺少“)”(在“return”的前面)
error: C2143: 语法错误: 缺少“;”(在“return”的前面)
error: C2065: “temp”: 未声明的标识符
error: C3867: “QDialog::result”: 非标准语法;请使用 "&" 来创建指向成员的指针
error: C2059: 语法错误:“}”
error: C1071: 在注释中遇到意外的文件结束
造成这些错误的原因是因为文件中存在中文,但编码格式不对
解决方法1:不使用英文
都9102年了,程序里应该全是英文,注释也换成英文
解决方案2:改变文件编码
qtCreator 编辑->选择编码
->SYSTEM ->按编码保存
这个问题的原因是因为Windows默认的GBK编码和UTF-8编码的冲突造成的,转换文件为GBK编码就行了。
源代码的编码 | 编译器 | 显示正常 | 显示乱码 |
---|---|---|---|
GBK | win vs cl(MSVC) | √ | |
GBK | win mingw-g++ | √ | |
GBK | linux g++ | √ | |
UTF-8(无BOM) | win vs cl(MSVC) | 编译失败error C2001: 常量中有换行符 | |
UTF-8(无BOM) | win mingw-g++ | √ | |
UTF-8(无BOM) | linux g++ | √ | |
UTF-8(有BOM) | win vs cl(MSVC) | √(可能会遇到问题) | |
UTF-8(有BOM) | win mingw-g++ | √ | |
UTF-8(有BOM) | linux g++ | √ |
解决方案3:使用偶数个中文或者奇数个中文最后加一个英文的点"."
这个奇妙的解决方法可以奏效,如果有大佬知道这个的原理,请告诉我。
这个解决方案适合于需要更改的文字数较少的情况。
参考资料: