Почему теряем данные типа string в с++? Класс: #include "Person.h"
#include
#include
using namespace std;
class Adult :
public Person
{
public:
Adult();
~Adult();
std::string GetDescription();
static void RandAdult(Adult * adult);
Person* MarriedOn = nullptr;
int GetAge();
void SetAge(int age);
string WorkPlace = (string)"";
};std::string Adult::GetDescription()
{
string tmpS = Surname + " " + Name + ", " + IntToStr(Age) + " years old," + SexToStr(sex);
if (MarriedOn == nullptr)
{
tmpS = tmpS + ", single";
}
else
{
tmpS = tmpS + ", married on "+MarriedOn->Name+" "+MarriedOn->Surname;
}
if (WorkPlace.length()>0)
{
tmpS = tmpS + ", " +WorkPlace;
}
else
{
tmpS = tmpS + ", unworked";
}
return tmpS;
}
Возникает ошибка при работе с полем WorkPlace.
Ошибка при работе программы :Возникло необработанное исключение по адресу 0x752AA6F2 в LAB6_5152.exe: исключение Microsoft C++: std::bad_alloc по адресу памяти 0x0019E050.
Строка с ошибкой :tmpS = tmpS + ", " +WorkPlace;

21 Авг 2019 в 07:03
244 +1
1
Ответы
1

Ошибка возникает из-за того, что вы пытаетесь использовать поле WorkPlace типа string в классе Adult, но подключили только библиотеку , а не . В результате происходит конфликт между стандартным типом std::string и типом строки из библиотеки string.h, что может привести к ошибке bad_alloc из-за неверного выделения памяти.

Чтобы исправить эту проблему, вам нужно либо использовать только стандартный тип std::string, удалив #include , либо использовать char* вместо string для поля WorkPlace. В этом случае вам придется управлять выделением и освобождением памяти вручную.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир