terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_M_construct null not valid
Мне нужно создать умный указатель на объект класса CsharpMethodUnit
. Но когда я пытаюсь выделить память и пишу :
std::shared_ptr<CsharpMethodUnit> CsharpMethodUnitPTR(std::make_shared<CsharpMethodUnit>(name,vozvr,Num));
выводится ошибка:
"terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_M_construct null not valid".
Исходный код:
class CsharpMethodUnit: public IMethodUnit {
public: enum Modifier {
STATIC = 1,
// CONST = 1 << 1,
VIRTUAL = 1 << 2
};
public: CsharpMethodUnit(const std::string & name,
const std::string & returnType, Flags
flags): m_name(name),
m_returnType(returnType),
m_flags(flags) {}
CsharpMethodUnit(const CsharpMethodUnit & obj)
{
this->m_returnType=obj.m_returnType;
this->m_flags=obj.m_flags;
this->m_name=obj.m_name;
this->m_body=obj.m_body;
this->name1 = obj.name1;
}
void add(const std::shared_ptr < Unit > & unit, Flags /* flags */ = 0) {
m_body.push_back(unit);
}
std::string compile(unsigned int level = 0) const {
std::string result = generateShift(level);
if (m_flags & STATIC) {
result += "static ";
} else if (m_flags & VIRTUAL) {
result += "virtual ";
}
result += m_returnType + " ";
result += m_name + "()";
result += " {\n";
for (const auto & b: m_body) {
result += b -> compile(level + 1);
}
result += generateShift(level) + "}\n";
return result;
}
std::string m_name;
std::string m_returnType;
Flags m_flags;
std::vector < std::shared_ptr < Unit > > m_body;};```
Источник: Stack Overflow на русском