2014-10-09 65 views
0

我學習C++從專業C++從Wrox的連接錯誤 - 未定義參考「命名空間::類::函數()」

下面是一個簡單的僱員記錄程序

1的3個文件。 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; 
} 

當我complie EmployeeTest.cpp我得到一個鏈接

「[鏈接錯誤]未定義參考`記錄::員工::員工()」

我知道它有一個簡單的回答,但我無法在幾個小時內解決這個問題。 任何幫助高度讚賞。

回答

1

您需要一次編譯兩個源文件或編譯爲目標文件並一次鏈接它們。

E.g.

$ gcc Employee.cpp EmployeeTest.cpp