首页 > 解决方案 > 编译多文件 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)并进行编译,我不会收到这些编译错误。

有人可以帮助了解这个编译/链接是如何在这里工作的。

谢谢。

标签: c++compilation

解决方案


默认参数应该对调用者可见,否则他们将无法使用它们。其他人应该可以看到的东西放在头文件中。

.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) :

推荐阅读