我需要一些帮助来理解C ++的后续编译。 以下是3个文件,
Employee.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);
};
Employee.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}{
}
main.cpp
#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)并进行编译,我不会得到这些编译错误。
有人可以帮忙了解一下此编译/链接的工作方式。
谢谢。
答案 0 :(得分:0)
默认参数应对调用者可见,否则它们将无法使用它们。别人应该看到的东西放在头文件中。
以下应放在.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) :