VS2017无法识别导入头文件?编译报C2065错误求助
首先看你给出的代码片段,最明显的问题就是预编译头文件stdafx.h的包含顺序错误。在Visual Studio默认的预编译头机制下,stdafx.h必须是源文件中第一个被包含的头文件——编译器会直接忽略#include "stdafx.h"之前的所有代码,这就导致你前面写的#include "Registry.h"实际上根本没被处理,自然找不到Registry类。
下面是按优先级排序的排查和解决步骤:
调整头文件包含顺序:把
#include "stdafx.h"移到所有头文件的最前面,修改后的代码开头应该是这样:#pragma once #include "stdafx.h" #include <iostream> #include <list> #include "Teacher.h" #include "Registry.h" // 其余using语句和代码...检查Registry类的命名空间:如果调整顺序后还是报错,打开
Registry.h看看,Registry类是不是定义在某个命名空间里(比如namespace SchoolSystem之类的)。如果是,你需要在使用的地方加上命名空间限定:std::list<SchoolSystem::Registry> myRegistryList;或者在文件开头添加
using namespace SchoolSystem;(注意不要在头文件里滥用命名空间,避免命名冲突)。确认Registry.h的路径正确性:虽然你说已经包含了头文件,但还是要检查一下
Registry.h是不是和当前源文件在同一个目录,或者已经被添加到项目的附加包含目录中。操作路径:右键项目 → 属性 → 配置属性 → C/C++ → 常规 → 附加包含目录,确认是否包含了Registry.h所在的文件夹。检查预编译头设置(可选):如果你的项目不需要预编译头,可以右键项目 → 属性 → 配置属性 → C/C++ → 预编译头,把“预编译头”选项改成“不使用预编译头”,这样就不用纠结
stdafx.h的顺序了,但预编译头能提升编译速度,除非必要不建议关闭。
调整顺序后重新编译,大概率就能识别到Registry类了。如果还是有问题,把Registry.h里的类定义片段贴出来,能更精准地排查问题。
内容的提问来源于stack exchange,提问作者BrettPfeil45

