首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将对象push_back到矢量

无法将对象push_back到矢量
EN

Stack Overflow用户
提问于 2018-11-23 18:01:07
回答 1查看 607关注 0票数 0

错误:我们在调用抛出的代码片段异常时出现以下错误:读取访问冲突。std::_Vector_alloc > >::_Myend(...)返回0xC。

代码语言:javascript
复制
bool _Has_unused_capacity() const _NOEXCEPT
{   // micro-optimization for capacity() != size()
return (this->_Myend() != this->_Mylast());
}

代码片段:错误:我们在调用代码片段异常抛出:读取访问冲突时出现以下错误。std::_Vector_alloc > >::_Myend(...)返回0xC。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2018-11-23 19:44:43

您的A对象具有未初始化的objTRANSACTIONID,没有B对象可将DNINFO推送到其TRANSACTIONID中。

如果可以,请不要在这里使用指针和new

代码语言:javascript
复制
// 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。注意,这个工具应该告诉你什么时候(或者是否) deletes的东西。如果不是这样,那就丢掉这个工具,自己编写合理的类。

代码语言:javascript
复制
//  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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53444452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档