Определение EmployeeRecord
отсутствует, но, согласно вашему коду, кажется, что оно должно быть примерно таким:
class EmployeeRecord {
...
public:
string *LastName; // all pointers ?
string *FirstName;
double *HrsWrkd;
double *PayRate;
...
};
Но для этого потребуется ручное управление памятью для создания элементаобъекты, использующие new
, перед сохранением некоторых значений.Это действительно так?
Конечно, не полностью.Потому что в соответствии с сообщением об ошибке - и при условии, что с параметрами string*
действительно нет проблем - вы, похоже, имеете:
class EmployeeRecord {
...
public:
string *LastName;
string *FirstName;
double HrsWrkd; // no pointers, but values
double PayRate;
...
};
В этом случае вам следует изменить свой вызов на:
// note the use of & to get the pointer to the object
InputEmployeeData(ptr->LastName, ptr->FirstName, &ptr->HrsWrkd, &ptr->PayRate);
Теперь, как говорится, в этом случае я бы рекомендовал также изменить string*
на string
, чтобы избежать ненужного ручного управления памятью.Вам действительно не нужен указатель в этом классе.В этом случае вам придется использовать &
для всех параметров.
Еще лучше: не только избавиться от указателей в EmployeeRecord, но и рассмотреть возможность передачи аргументов по ссылке:
void InputEmployeeData(std::string& LastName, std::string& FirstName, double& HrsWrkd, double& PayRate)
{
...
std::cin >> FirstName; // no use of pointer dereferencing * anymore
// the reference will make sure the original object
// passed by reference will be modified
...
}