Хорошо, поэтому я довольно новичок в c++, и это моя первая попытка использования векторов. Моя цель - хранить объекты в векторе. Я пытаюсь следовать этому учебнику по YouTube:
http://www.youtube.com/watch?v=iPlW5tSUOUM
и я думаю, что мой практически не отличается от его пробегов.
Я просто продолжаю получать ошибки, и это не сработает. Любая помощь будет оценена :) Возможно, это что-то маленькое, но я уже некоторое время проверяю, и я ничего не вижу.
Ошибки: 1> c:\users\user\desktop\vector objects c++\testvectorobjects\testvectorobjects\main.cpp(61): ошибка C3867: "Сотрудники :: getSalary": список вызовов отсутствующих аргументов; use '& Employees :: getSalary' для создания указателя на члена
1> c:\users\user\desktop\vector objects c++\testvectorobjects\testvectorobjects\main.cpp(61): ошибка C2679: двоичный '<<': оператор не найден, который принимает правый операнд типа ' overloaded-function '(или нет приемлемого преобразования)
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\ostream (695): может быть 'std :: basic_ostream <_Elem, _Traits> & std :: operator <<> (std :: basic_ostream < _Elem, _Traits> &, const char *) '
У меня есть 3 файла: main.cpp, Employee.h, Employees.cpp
//main.cpp
#include <iostream>
#include <string>
#include <vector>
#include "Employee.h"
void fillVector(vector<Employees>&);
//fill vector - fills in Employee Info
//vector<Employees>& - Employees at the station
void printVector(const vector<Employees>&);
//print vector - prints the employee info
//const vector<Employees>& - employees at the station
using namespace std;
vector<Employees> Staff;
int main(){
fillVector(Staff);
printVector(Staff);
}
//filling the employee vector
void fillVector(vector<Employees> & newStaff){
int id;
double salary;
string name;
cout << "Number of Employees" << endl;
int amountEmployees;
cin >> amountEmployees;
for (int i = 0; i < amountEmployees; i++) {
cout << "Enter Employee Id: ";
cin >> id;
cout << "Enter Employee Salary: ";
cin >> salary;
cout << "Enter Employee Name: ";
cin >> name;
Employees newEmployees(id, salary, name);
newStaff.push_back(newEmployees);
cout << endl;
}
cout << endl;
}
//printing the employee vector
void printVector(const vector<Employees>& newStaff){
unsigned int size = newStaff.size();
for (unsigned int i = 0; i < size; i++) {
cout << "Employee Id: " << newStaff[i].getID << endl;
cout << "Employee Name: " << newStaff[i].getName << end;
cout << "Employee Salary: " << newStaff[i].getSalary << end;
cout << endl;
}
}
//Employee.h
//Header
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <iostream>
#include <string>
using namespace std;
class Employees{
public:
//after
//Default Constructor
Employees();
//Overload constructor
Employees(int, double, string);
//Destructor
~Employees();
//Accessor Functions
int getID() const;
//getId
//return int - Id for Employee
double getSalary() const;
//getSalary
//return salary - salary of Employee
string getName() const;
//getName
//return name - Name of Employee
//Mutators
void setId(int);
//setId - for Employee
void setSalary(double);
//setSalary - for Employee
void setName(string);
//setName - for Employee
//
//before
//ID
//void setEmployeeId(int a){
//employeeId = a;
//}
////Salary
//void setSalary(double b){
//salary = b;
//}
////Name
//void setName(string c){
//name = c;
//}
private:
//after
//before
int employeeId; //id
double employeeSalary; //salary
string employeeName; //name
};
#endif
//Employees.cpp
#include "Employee.h"
Employees::Employees() {
employeeName = ' ';
}
Employees::Employees(int id, double salary, string name){
employeeId = id;
employeeSalary = salary;
employeeName = name;
}
Employees::~Employees(){
}
int Employees::getID()const{
return employeeId;
}
double Employees::getSalary()const{
return employeeSalary;
}
string Employees::getName()const{
return employeeName;
}
void Employees::setId(int id){
employeeId = id;
}
void Employees::setSalary(double salary){
employeeSalary = salary;
}
void Employees::setName(string name){
employeeName = name;
}
'Employees::getSalary': function call missing argument list;
Это кажется совершенно ясным: getSalary
- это функция, и вам нужен список аргументов при вызове функции:
cout << "Employee Salary: " << newStaff[i].getSalary() << endl;
^^ ^
и аналогично для вызовов getID
и getName
.
Фиксация, которая также должна исправить вторую ошибку; или это может быть вызвано ошибкой endl
.
Я думаю, что ошибка объясняется самим собой, как только вы знаете несколько терминов C++. Вторая часть (use '&Employees::getSalary' to create a pointer to member
) на самом деле путает вас, потому что компилятор говорит о совершенно несвязанной C++ возможности, которую, по вашему мнению, вы пытаетесь использовать.
Давайте посмотрим:
"Сотрудники :: getSalary": список вызовов отсутствующих аргументов
Чтобы вызвать функцию, вы должны указать список аргументов с круглыми скобками, даже если у вас нет аргументов вообще!
cout << "Employee Salary: " << newStaff[i].getSalary() << end;
То есть, добавьте несколько ()
здесь и там.
Вы должны использовать функцию call operator()
(оператор приложения) для вызова функции
function_name() // call a function named function_name
таким образом:
cout << "Employee Id: " << newStaff[i].getID() << endl;
^^
cout << "Employee Name: " << newStaff[i].getName() << end;
^^
cout << "Employee Salary: " << newStaff[i].getSalary() << end;
^^
Эта:
newStaff[i].getName
Нужно быть следующим:
newStaff[i].getName()
И так далее.