在Atom中编译C++时遇头文件及类声明作用域问题求助
解决C++编译时"class not declared in this scope"的问题
让我帮你梳理下问题根源,你碰到的这个错误,其实是代码里的几个语法小问题引发的,加上编译方式的小疏忽,一步步来解决:
1. 头文件里的成员函数遗漏了返回类型
C++里除了构造/析构函数,所有函数必须明确写返回类型。你的mine.h里opa()和part()都没声明返回值,这会让编译器没法正确解析Perfect类,直接就报“类未声明”的错误了。
修正后的头文件应该改成这样:
#include <iostream> #ifndef MINE_H_ // 把宏改成和文件名匹配的MINE_H_,避免和其他头文件冲突 #define MINE_H_ class Perfect { public: void opa(); // 和源文件里的void返回类型对应 int part(); // 和源文件里的int返回类型对应 }; #endif
2. 编译时要把所有相关源文件都带上
你有两个源文件,编译的时候不能只单独编译其中一个(比如只编译source1.cpp),不然编译器找不到Perfect成员函数的定义,还会出链接错误。
如果用命令行编译,要这样写:
g++ source1.cpp source2.cpp -o my_program ./my_program
要是用Atom的编译工具,得检查一下编译配置,确保把两个源文件都包含进去,不然编辑器只会编译当前打开的文件,自然会出问题。
3. 关于之前“突然正常”的小插曲
之前没改代码就突然能运行,大概率是编辑器或者编译器的缓存搞的鬼——可能之前正确的编译结果被缓存下来了,后来缓存清空或者失效,问题就又暴露了。这种情况在编辑器里偶尔会发生,清理下编译缓存就能避免。
内容的提问来源于stack exchange,提问作者user9851117
相关产品推荐
相关产品推荐

