Невозможно вернуть объект в вектор - PullRequest
0 голосов
/ 23 ноября 2018

Ошибка: мы получаем ошибку ниже при вызове фрагмента кода. Исключение: нарушение прав чтения.std :: _ Vector_alloc>> :: _ Myend (...) вернул 0xC.

bool _Has_unused_capacity() const _NOEXCEPT
{   // micro-optimization for capacity() != size()
return (this->_Myend() != this->_Mylast());
}

Фрагмент кода: ошибка: мы получаем ошибку ниже при вызове фрагмента кода. Возникла исключительная ситуация: нарушение прав чтения.std :: _ Vector_alloc>> :: _ Myend (...) вернул 0xC.

bool _Has_unused_capacity() const _NOEXCEPT
{   // micro-optimization for capacity() != size()
return (this->_Myend() != this->_Mylast());
}


class  A 
{
public:
    class B *objTRANSACTIONID;
};
// second class
class  B {
public:
    std::vector<class C * >TRANSACTIONID;
};
// Third class
class C {
public:
    std::string *APPLICATIONID;
    std::string *CREATEDBY;
};
//  C++ Code
int main()
{
    A *aObject =new A();
    C *DNINFO = new C();
    std::string FieldName = "UserType";
    DNINFO->APPLICATIONID = &FieldName;
    DNINFO->CREATEDBY = &FieldName;
    // Throws error as “unused capacity” for vector.
    aObject->objTRANSACTIONID->TRANSACTIONID.push_back(DNINFO);
}

1 Ответ

0 голосов
/ 23 ноября 2018

Ваш A объект имеет неинициализированный objTRANSACTIONID, нет B объекта, чтобы вставить DNINFO в него TRANSACTIONID.

Не используйте указатели и new здесь, есливы можете

// Third class
class C {
public:
    std::string APPLICATIONID;
    std::string CREATEDBY;
};

// second class
class  B {
public:
    std::vector<C>TRANSACTIONID;
};

class  A 
{
public:
    B objTRANSACTIONID;
};


//  C++ Code
int main()
{
    A aObject;
    C DNINFO;
    std::string FieldName = "UserType";
    DNINFO->APPLICATIONID = FieldName;
    DNINFO->CREATEDBY = FieldName;
    aObject.objTRANSACTIONID.TRANSACTIONID.push_back(DNINFO);
}

Очевидно, ваши классы генерируются инструментами, поэтому в этом случае вам нужно выделить B.Обратите внимание, что этот инструмент должен сообщать вам, когда (или если) это вещи.Если этого не произойдет, выбросьте инструмент и напишите разумные классы самостоятельно.

//  C++ Code
int main()
{
    A  aObject;
    aObject.objTRANSACTIONID = new B;
    C * DNINFO = new C;
    DNINFO->APPLICATIONID = new std::string("UserType"); // have to assume owning raw pointer
    DNINFO->CREATEDBY = new std::string("UserType"); // have to assume owning raw pointer
    aObject.objTRANSACTIONID->TRANSACTIONID.push_back(DNINFO);
}
...