Я написал код для печати имени 2 рабочих, но вместо этого он печатает мусор.
cout << "highest salary: " << highestSalary.getID() << " " << highestSalary.getName() << endl;
cout << "hardest worker: " << mostHours.getID() << " " << mostHours.getName();
функция getName () определена в рабочем классе как:
char* Worker::getName()
{
char temp[20];
int i;
strcpy(temp, name);
return temp;
}
Проходя через это в отладчике, я попытался поместить значение самое высокоеSalary.getName () в ver char * temp, и это было то, что я ожидал, скажем, «bob», но после cout значение было «» и cout печатный мусор.
Вы передаете указатель на локальную переменную. Как только ваша функция заканчивается, эта переменная исчезает.
Если это C ++, вы должны использовать строковый класс. Если по какой-то причине вы не конст правильно:
const char* Worker::getName() const
{
return name;
}
НЕТ НЕТ НЕТ, вы возвращаете указатель на локальную переменную функции. Вот почему он падает.
Сделайте это вместо этого:
std::string Worker::getName()
{
std::string temp(name); // not sure what type of name is...
return temp;
}
Не забудь #include<string>
,
Теперь у вас есть настоящий C ++, а не C и указатели.