c++ - 链接器错误 - 未定义对 "namespace::class::function()"的引用

标签 c++

<分区>

我正在从 wrox 的 Professional C++ 学习 C++

下面是一个简单的员工记录程序的3个文件

1.Employee.h

// Employee.h
#include <iostream>
namespace Records {
const int kDefaultStartingSalary = 30000;
class Employee
{
public:
Employee();
void promote(int inRaiseAmount = 1000);
void demote(int inDemeritAmount = 1000);
void hire(); // Hires or rehires the employee
void fire(); // Dismisses the employee
void display(); // Outputs employee info to the console
// Accessors and setters
void setFirstName(std::string inFirstName);
std::string getFirstName();
void setLastName(std::string inLastName);
std::string getLastName();
void setEmployeeNumber(int inEmployeeNumber);
int getEmployeeNumber();
void setSalary(int inNewSalary);
int getSalary();
bool getIsHired();
private:
std::string mFirstName;
std::string mLastName;
int mEmployeeNumber;
int mSalary;
bool fHired;
};
}

2.Employee.cpp

// Employee.cpp
#include <iostream>
#include "Employee.h"
using namespace std;
namespace Records {
Employee::Employee()
{
mFirstName = "";
mLastName = "";
mEmployeeNumber = -1;
mSalary = kDefaultStartingSalary;
fHired = false;
}
void Employee::promote(int inRaiseAmount)
{
setSalary(getSalary() + inRaiseAmount);
}
void Employee::demote(int inDemeritAmount)
{
setSalary(getSalary() - inDemeritAmount);
}
void Employee::hire()
{
fHired = true;
}
void Employee::fire()
{
fHired = false;
}
void Employee::display()
{
cout << "Employee: " << getLastName() << ", " << getFirstName() << endl;
cout << "-------------------------" << endl;
cout << (fHired ? "Current Employee" : "Former Employee") << endl;
cout << "Employee Number: " << getEmployeeNumber() << endl;
cout << "Salary: $" << getSalary() << endl;
cout << endl;
}
// Accessors and setters
void Employee::setFirstName(string inFirstName)
{
mFirstName = inFirstName;
}
string Employee::getFirstName()
{
return mFirstName;
}
void Employee::setLastName(string inLastName)
{
mLastName = inLastName;
}
string Employee::getLastName()
{
return mLastName;
}
void Employee::setEmployeeNumber(int inEmployeeNumber)
{
mEmployeeNumber = inEmployeeNumber;
}
int Employee::getEmployeeNumber()
{
return mEmployeeNumber;
}
void Employee::setSalary(int inSalary)
{
mSalary = inSalary;
}
int Employee::getSalary()
{
return mSalary;
}
bool Employee::getIsHired()
{
return fHired;
}
}

3.EmployeeTest.cpp

// EmployeeTest.cpp
#include <iostream>
#include <conio.h>
#include "Employee.h"
using namespace Records;
int main (int argc, char** argv)
{
std::cout <<"Testing the Employee class." << std::endl;
Employee emp;
emp.setFirstName("Marni");
emp.setLastName("Kleper");
emp.setEmployeeNumber(71);
emp.setSalary(50000);
emp.promote();
emp.promote(50);
emp.hire();
emp.display();
getch();
return 0;
}

当我编译 EmployeeTest.cpp 时,我得到一个链接器

[链接器错误] 未定义对 `Records::Employee::Employee() 的引用

我知道它有一个简单的答案,但我无法在几个小时内解决这个问题。 非常感谢任何帮助。

最佳答案

您需要一次编译两个源文件或编译为目标文件并立即链接它们。

例如

$ gcc Employee.cpp EmployeeTest.cpp

关于c++ - 链接器错误 - 未定义对 "namespace::class::function()"的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284864/

相关文章:

C++ 从引用中转换

c++ - opengl - 镜像着色器的可能性?

c++ - EnumWindows 不工作

c++ - 是否需要包含头文件?

c++ - 如何在 C++ 中读取 .json 文件?

c++ - 如何解决 CMake 构建不可重现的 SegFault

c++ - 如何在 C++ 中读取 .shd 文件?

c++ - IDWriteFactory::CreateTextFormat() 失败

c++ - FindFirstFile() 显示地址

c++ - QVTKWidget中的renderWindowInteractor