Having trouble with my class and vector working

I have written my code for an employee management system that stores Employee class objects into a vector, I am getting no errors until I try and compile, I am getting the error: C2679 binary '==': no operator found which takes a right-hand operand of type 'const std::string' (or there is no acceptable conversion). But I am not sure why any help would be great, Thank you!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

class Employee
{
public:
	Employee();
	string GetName();
	string GetStatus();
	float GetSalary();
	int GetAge();
	int GetYearHired();

private:
	string m_Name;
	string m_Status;
	float m_Salary;
	int m_Age;
	int m_YearHired;

};

Employee::Employee()
{
	m_Salary = 0;
	m_Age = 0;
	m_YearHired = 0;
}

string Employee::GetName()
{
	string fName;
	string lName;
	cout << "Please enter the new employee's first name: ";
	cin >> fName;
	cout << "Please enter the new employee's last name: ";
	cin >> lName;
	m_Name = fName + lName;
	return m_Name;
}

string Employee::GetStatus()
{
	string status;
	cout << "Please enter the employee's status (full time, part time, or manager): ";
	cin >> status;
	return m_Status;
}

float Employee::GetSalary()
{
	float salary;
	cout << "Please enter the employee's salary: ";
	cin >> salary;
	return m_Salary;
}

int Employee::GetAge()
{
	int age;
	while (true)
	{
		cout << "Please enter the employee's age: ";
		cin >> age;
		if (age > 0)
			break;
		else
			cout << "Error: Please enter a positive value.";
	}
	return m_Age;
}

int Employee::GetYearHired()
{
	int yearHired;
	cout << "Please enter what year the employee was hired: ";
	cin >> yearHired;
	return m_YearHired;
}

class Staff
{
	vector<Employee*> emps;
	vector<Employee*>::const_iterator iter;
public:
	Staff();
	virtual ~Staff();
	void Add();
	void Remove();
	void Clear();
	void Display();
};

Staff::Staff()
{
	emps.reserve(20);
}

Staff::~Staff()
{
	Clear();
}

void Staff::Add()
{
	Employee* emp = new Employee;
	emp->GetName();
	emp->GetStatus();
	emp->GetSalary();
	emp->GetAge();
	emp->GetYearHired();
	emps.push_back(emp);
}

void Staff::Remove()
{
	Employee* emp;
	cout << "Which employee would you like to remove?";
	emp->GetName();

	iter = find(emps.begin(), emps.end(), emp->GetName());	// Trying to find the employee in the datbase.
	if (iter != emps.end())							// If the employee is found in the vector it is removed.
	{
		cout << "\n" << *iter << " was removed\n\n";
		emps.erase(iter);								// removes employee from the vector.
	}
	else		// If the employee is not found in the vector, it tells the user that the employee was not found. 
	{
		cout << "Employee not found, please choose anoter employee.\n\n";
	}
}

void Staff::Clear()
{
	cout << "\nDo you really want to clear all employees? (yes/no)\n";	// Asking the user if they want to clear the database
	string response;	// Storing the response of the user.
	cin >> response;	// Getting the users response (yes/no).
	if (response == "yes") // If response is yes.
	{
		vector<Employee*>::iterator iter = emps.begin();	// Declares an iterator for the emps vector and sets it to the beginning of the vector.
		for (iter = emps.begin(); iter != emps.end(); ++iter)	// Iterates through vector.
		{
			delete *iter;	// Deletes the iterators in the vector, freeing all memory on the heap.
			*iter = 0;	// Sets iterator to zero so it does not become a dangling pointer.
		}
		emps.clear();	// Clear vector of pointers.
	}
	else             // If response is no.
	{
		cout << "\nAll employee's remain in the database.\n";
	}
}

void Staff::Display()
{
	Employee* emp;
	if (emps.size() == 0)	// Checking to see if the database is empty.
		cout << "\nThere are no Employee's in the database, add Employee's to view them here.\n";
	else		// If the database contains any Employee's.
	{
		cout << "\nThe database contains: \n";
		for (iter = emps.begin(); iter != emps.end(); ++iter)	// Displaying the database.
		{
			cout << "-------------------------------------------------";
			cout << "Employee's Name		 : " << emp->GetName() << endl;
			cout << "Employee's Status		 : " << emp->GetStatus() << endl;
			cout << "Employee's Salary		 : " << emp->GetSalary() << endl;
			cout << "Employee's Age			 : " << emp->GetAge() << endl;
			cout << "Year employee was hired : " << emp->GetYearHired() << endl;
			cout << "-------------------------------------------------";
		}
	}
}

int main()
{
	int option = 0;
	Staff stf;
	// Welcoming the user to the Employee Management System program. 
	cout << "Welcome to our Employee Management System! To get started see the menu options below:\n";

	// Main loop
	while (option != 5)	// The loop will repeat until the user enters 5 as the option.
	{
		cout << "--------------------------------------------------------------------------------------";
		cout << "\nMenu Options: \n";
		cout << "\nTo select an option, please type in the number that corresponds to that option.\n";
		cout << "1 - Add an Employee\n2 - Remove an Employee\n3 - Clear the database\n4 - Display Employee's in Database\n5 - Quit" << endl;
		cout << "\nWhat would you like to do? ";
		cout << "--------------------------------------------------------------------------------------";

		// Start of the validity check.
		bool validInput = false;

		while (!validInput) // The loop will repeat until the users input is valid.
		{
			cin >> option;	// User inputs first option choice.
			validInput = true;	// Assign the input as valid.
			if (cin.fail())		// Tests to make sure the value assigned is valid for the variable type.
			{
				cout << "\nPlease choose a menu option by number\n";
				cin.clear();	// Clears stream error.
				cin.ignore(numeric_limits<streamsize>::max(), '\n'); // Removes an invalid characters.
				validInput = false;	// Sets the input back to false, repeats the loop.
			}
		}

		switch (option)
		{
		case 1:
		{
			stf.Add();
			break;
		}
		case 2:
		{
			stf.Remove();
			break;
		}
		case 3:
		{
			stf.Clear();
			break;
		}
		case 4:
		{
			stf.Display();
			break;
		}
		case 5:	// If option == 5.
			cout << "\nThank you for using the Employee Management Program!\n";	// Thanks the user for using the Employee Management program.
			break;
		default:	// If the user does not put in a valid option, it tells them to try again.
			cout << "\nThat's not a valid option. Please try again.\n";
			break;
		}
	}
	system("pause");
	return 0;
}

Last edited on
On line 125 you are trying to find a string in a vector of Employee*.

Do your really need pointers here anyway?
Last edited on
Topic archived. No new replies allowed.