C++单独编译及ADT使用中User类未声明编译错误如何解决?
报错成因
- 问题根源在
Interface.h的User类定义逻辑:头文件中仅引入了<string>标准库,但是User类的name成员用到的string属于std命名空间,你没有指定命名空间前缀,也没有在头文件中声明命名空间引用,编译器处理到string name代码行时无法识别该类型,直接中断了User类的定义,导致User类实际未成功声明,因此main.cpp调用User时就会抛出未在当前作用域声明的报错。 - 你没有看到
string类型相关报错,是编译器/IDE的报错展示规则导致,底层实际是类型识别失败引发的类定义失效。
修复方案
- 优先推荐修改
Interface.h中的User类定义,给string加上std::前缀(头文件中不要使用using namespace std,避免全局命名空间污染),修改后的头文件代码如下:
#ifndef INTERFACE_H #define INTERFACE_H #include <string> void hello(); class User { public: std::string name; int age; }; #endif//INTERFACE_H
- 编译时需要将所有源文件加入编译队列,使用GCC直接编译的参考命令为:
g++ main.cpp Interface.cpp -o FirstProject,编译完成后运行生成的可执行文件即可正常执行。
内容的提问来源于stack exchange,提问作者user1234554321
相关产品推荐
相关产品推荐

