リンカーエラーがあり、理解できないようです。
デフォルトのコンストラクターは、名前を「不明」に、オフィス番号をnextOfficeNoに、従業員番号をnextEmpIdの値に、部門番号を0に、従業員の役職をエントリーレベルに、経験年数を0に、給与を0に設定します。すべての静的属性の値は1ずつ増加します。
2番目のコンストラクターは、関数に渡される内容に基づいて属性を設定します。従業員の給与の値は引き続き0に設定され、OfficeNumberとEmployeenumberの値はそれぞれnextOfficeNoとnextEmpIdに設定されます。この場合も、コンストラクターはすべての静的属性の値を1ずつインクリメントする必要があります。totalNumOfEmployeesの値は、オブジェクトを作成する前に0に初期化し、クラスEmployeeの各オブジェクトを作成するときに(すべてのコンストラクターで)インクリメントし、クラスEmployeeのオブジェクトがスコープ外になると(デストラクタで)デクリメントする必要があります。
nextEmpIdの値は、オブジェクトを作成する前に1000に初期化する必要があり、すべてのコンストラクターでクラスEmployeeの各オブジェクトを作成するときにインクリメントする必要があります。
nextOfficeNoの値は、オブジェクトを作成する前に10に初期化する必要があり、すべてのコンストラクターでEmployeeクラスの各オブジェクトを作成するときにインクリメントする必要があります。
これは私のヘッダークラスです:
#include <iostream>
#include <string>
using namespace std;
class Employee
{
private:
string name;
const long officeNo;
const long empId;
int deptNo;
char empPosition; // ‘E’: entry level, ‘M’: manager, ‘D’: Director, ‘P’:Project_leader
int yearOfExp;
float salary;
static int totalNumofEmployees;
static int nextEmpId;
static int nextOfficeNo;
public:
Employee();
~Employee();
Employee(string theName, int theDeptNo, char theEmpPosition, int theYearOfExp);
void Print() const ;
void GetInfo();
friend void setSalary(Employee& );
};
これが私のCPPクラスです。
コンストラクターに問題があります。
#include "Employee.h"
#include <string>
#include <iostream>
Employee::Employee()
: officeNo(nextOfficeNo), empId(nextEmpId)
{
name = "Unknown";
deptNo = 0;
empPosition = 'E';
yearOfExp = 0;
salary = 0;
totalNumofEmployees = 0;
nextEmpId = 1000;
nextOfficeNo = 10;
totalNumofEmployees++;
nextEmpId++;
nextOfficeNo++;
}
Employee::Employee(string theName, int theDeptNo, char theEmpPosition, int theYearOfExp)
: officeNo(nextOfficeNo), empId(nextEmpId)
{
name = theName;
deptNo = theDeptNo;
empPosition = theEmpPosition;
yearOfExp = theYearOfExp;
salary = 0;
totalNumofEmployees = 0;
nextEmpId = 1000;
nextOfficeNo = 10;
totalNumofEmployees++;
nextEmpId++;
nextOfficeNo++;
}
ここにエラーがあります:
{Undefined symbols for architecture x86_64:
"Employee::nextOfficeNo", referenced from:
Employee::Employee() in Employee.o
Employee::Employee(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, char, int) in Employee.o
"Employee::totalNumofEmployees", referenced from:
Employee::Employee() in Employee.o
Employee::Employee(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, char, int) in Employee.o
Employee::~Employee() in Employee.o
Employee::Print() const in Employee.o
"Employee::nextEmpId", referenced from:
Employee::Employee() in Employee.o
Employee::Employee(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, char, int) in Employee.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
}