PCH或stdafx预编译头导致的找不到声明的问题
明明类和函数都已经声明了,声明定义都存在,检查过好几遍,但是编译器还是报错
错误 C2065 “init”: 未声明的标识符
刚开始想从文件编码的角度入手,查看是不是编码出现了问题,因为编码问题也会导致类似的情况出现。
但是文件编码也都是一样的,并不是编码出现异常。
找了很久,后来无意间,改动了头文件include代码区,导致代码include顺序发生了变化,竟然意外编译通过了!!!
#include "OiPCH.hpp"
#include <QApplication>
#include <QTextCodec>
#include <QDesktopWidget>
#include <QInputDialog>
#include <QCryptographicHash>
#include <QMessageBox>#include "Base/OiDefines.hpp"
#include "Base/OiGlobals.hpp"
#include "Core/OiCore.hpp"
#include "Core/OiSettings.hpp"#include "OiCircleMarkWindow.hpp"
#include "OiCircleMarkDatabase.hpp"
#include "OiSmart.Flow/Appl.hpp"
唯一的区别就是把pch
头文件调整到了第一行,然后就编译通过了。
查询资料发现OiPCH
是项目里定义的预编译头文件,一般来说,预编译头文件都有类似pch
、stdafx
之类的名字,也可以自定义,自行配置
对于预编译头文件,必须放在代码第一行,这是使用预编译头文件的硬性要求,是规定,编译器规定好的,没那么多为什么。
需要深入了解的话就要参考微软文档