编译多文件C ++程序

时间:2018-07-22 03:31:29

标签: c++ compilation

我需要一些帮助来理解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)并进行编译,我不会得到这些编译错误。

有人可以帮忙了解一下此编译/链接的工作方式。

谢谢。

1 个答案:

答案 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) :