c++ - 编译多文件 C++ 程序
问题描述
我需要一些帮助来理解 C++ 的以下编译。以下是3个文件,
员工.h
class Employee{
private:
std::string m_empName = "DEFAULT_NAME";
int m_age = -99;
long m_num = 0l;
public:
Employee(std::string p_empName, int p_age, long p_num);
};
员工.cpp
#include"Employee.h"
Employee::Employee(std::string p_empName = "DEFAULT_CONST_NAME", int p_age = -98, long p_num = 0):
m_empName{p_empName},m_age{p_age},m_num{p_num}{
}
主文件
#include"Employee.h"
int main(){
Employee e1;
return 0;
}
如果我编译这段代码,我会得到以下编译错误,
main.cpp: In function ‘int main()’:
main.cpp:7:14: error: no matching function for call to
‘Employee::Employee()’
Employee e1;
但是,如果我将所有代码从 main.cpp 移动到 Employee.cpp(并删除 main.cpp)并进行编译,我不会收到这些编译错误。
有人可以帮助了解这个编译/链接是如何在这里工作的。
谢谢。
解决方案
默认参数应该对调用者可见,否则他们将无法使用它们。其他人应该可以看到的东西放在头文件中。
.h 文件中应包含以下内容:
Employee(std::string p_empName = "DEFAULT_CONST_NAME",
int p_age = -98,
long p_num = 0);
这应该放在 .cpp 文件中:
Employee::Employee(std::string p_empName,
int p_age,
long p_num) :