【问题标题】:Storing new object in pointer vector c++在指针向量c ++中存储新对象
【发布时间】:2020-08-17 16:19:11
【问题描述】:

使用以下代码,我需要将新对象存储在指针向量中。我已经完成了,但现在它不会显示有关循环中对象的任何信息(我在哪里通过向量)。在类 Tvrtka(公司)中,我有 Zaposlenik(工人)的指针向量。对于我存储的每个对象,它都会转到向量。

class Tvrtka{
public:
    string oib;
    string naziv;
    string adresa;
    vector<const Zaposlenik*> zaposlenici;
    Tvrtka(){}
    Tvrtka(const string _oib, const string _naziv,const  string _adresa, vector<const Zaposlenik*> _z)

    {
        this->oib=_oib;
        this->naziv=_naziv;
        this->adresa=_adresa;
        for(int i=0;_z.size();i++)
        {
            zaposlenici.push_back(_z[i]);
        }
    }

主要部分:

vector<const Zaposlenik*>zaposlenici;

    Zaposlenik *z1=new Zaposlenik("Marko", "maric", 20);
    zaposlenici.push_back(z1);

    Tvrtka t1("198","Majur", "2222", zaposlenici);


        for(int i=0;i<zaposlenici.size();i++)
        {


            cout<<zaposlenici[i]->ime;
        }

如果我评论 t1(Tvrtka 的对象),它会显示有关工人的信息。

【问题讨论】:

  • 请编辑您的问题以包含minimal reproducible example、预期行为以及您得到的结果。
  • Tvrtka ctor 中的注意循环是完全多余的,复制向量(或赋值)的 ctor 会导致完全相同的结果。
  • 回滚,因为这个版本更接近完成(虽然没有完成)
  • @MikeCAT 通过回滚你的回答无效:)
  • @Slava 你是什么意思?

标签: c++ pointers vector


【解决方案1】:

在这个循环中

for(int i=0;_z.size();i++)
{
    zaposlenici.push_back(_z[i]);
}

_z.size() 用作循环条件,这与i 无关。 这意味着如果您将非空向量作为_z 传递,则循环将无限循环,并且将耗尽内存。

应该是

for(int i=0;i<_z.size();i++)
{
    zaposlenici.push_back(_z[i]);
}

或者干脆

for(auto& elem : _z)
{
    zaposlenici.push_back(elem);
}

【讨论】:

  • 或者干脆zaposlenici = _z;
  • 我的条件错误,tnx 伙计们。是我<_z>
  • @Momo 这就是为什么最好不要编写冗余代码,这样可以减少出错的机会。
猜你喜欢
  • 1970-01-01
  • 2011-02-11
  • 2021-05-20
  • 2012-09-25
  • 2011-10-01
  • 2014-12-19
  • 2013-09-12
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多