自定义C++头文件编译报错求助:多编译器下出现语法错误
问题分析与代码修正
错误原因拆解
employe.cpp 报错原因
- 类成员函数定义必须用作用域解析符
::,而非.——.是用来访问对象成员的,::才是指定类作用域的正确语法。 - 成员函数内部不能用类名
employe加.访问成员变量,这些变量属于对象实例,直接写变量名即可;另外代码里还把类名employe误写成了employee。
- 类成员函数定义必须用作用域解析符
main.cpp 报错原因
id是类的实例成员,必须先创建类的对象,通过对象来访问,不能直接用类名employe访问非静态成员。头文件潜在问题
宏定义employee和类名employe过于相似,不符合常规命名规范,容易引发预处理冲突,建议改为大写的EMPLOYEE_H。另外原头文件漏了#include <string>,使用string类型必须包含该头文件。
修正后的完整代码
employee.h
#ifndef EMPLOYEE_H #define EMPLOYEE_H #include <iostream> #include <string> using namespace std; class employe{ public: string name; int id; int salary; void showInfos(); }; #endif
employe.cpp
#include "employee.h" #include <iostream> using namespace std; void employe::showInfos(){ cout << "Ad:" << name << endl << "Id:" << id << endl << "Salary:" << salary << endl; }
main.cpp
#include <iostream> #include "employee.h" int main(){ // 创建类的实例对象 employe emp; // 通过对象访问成员变量 emp.id = 21; cout << emp.id << endl; // 测试成员函数 emp.name = "Muratkavak"; emp.salary = 5000; emp.showInfos(); return 0; }
编译运行说明
修改后可在三种环境正常编译:
- GCC:执行命令
g++ main.cpp employe.cpp -o employee,运行生成的employee文件 - Visual Studio:将三个文件添加到项目中直接编译
- Dev C++:新建项目并添加三个文件,编译运行即可
内容的提问来源于stack exchange,提问作者muratkavak
相关产品推荐
相关产品推荐

