变量没有改变?通过向量函数调用

时间:2018-11-03 11:06:58

标签: c++

这是我的代码,我已经进行了多次测试,以确保将对象添加到vector中是正确的。所以我尝试从那里前进一些。 我的程序是,Voter类将是BallotPaper的向量,而BallotPaper将具有Candidate的向量。候选类将具有一个称为_votecount的私有变量。

我想执行的是,我想使用功能getAttributes()通过Voter增加_votecount。

但是,在我的情况下_votecount并没有达到我的预期,并且我无法弄清楚,也许很明显,因此我很感激任何输入。

这是我的主要爱好:

Vote(int,int)

投票班

int main()
{
    Date d1(2018, 10, 1);// new Date object
    Member m1("Alice", 100, "Engineering", 012, d1, PositionType::Normal);
    bool check = m1.CheckEligibility();
    cout << check<<"\n";

    Voter v1("Ailee", 100, "Engineering", 012, d1, PositionType::Normal);
    if (v1.getName() == "Ailee")
    {
         cout << "\nTrue1\n";   // Yes
    }

    BallotPaper bp1(PositionType::President);
    v1.AddBallotPaper(bp1);
    if (v1.getBallotPapers()[0].getPositionBP() == PositionType::President)
    {
        cout << "\nTrue2\n"; //Yes
    }

     Candidate c1("Ailee", 100, "Engineering", 012, d1, PositionType::Normal);
     v1.getBallotPapers()[0].AddCandidate(c1);
     if (v1.getBallotPapers()[0].getCandidates()[0].getName() == "Ailee")
     {
         cout << "\nTrue3\n";   //Yes
     }

// Voter cast vote to increase candidate count
    v1.Vote(0, 0);

    if (c1.getVoteCount() == 1)
    {
         cout << "\nDONE\n";     //ERROR HERE!
    }
    return 0;
}

BallotPaper类

class Voter :public Member
{
    private:
        std::vector<BallotPaper> _bp;  
    public:
        Voter::Voter(std::string a, int b, std::string c, int d, Date e, PositionType f) : Member(a, b, c, d, e, f) 
{}

     void Voter::AddBallotPaper(BallotPaper b)
    {
          _bp.push_back(b);  
    }

    std::vector<BallotPaper>& Voter::getBallotPapers()
    {
         return this->_bp;
    }

//HOW DO YOU VOTE?
     void Voter::Vote(int paperindex,int index)
     {
           getBallotPapers()[paperindex].ChoiceVoted(index);   
     }
}

候选人类别

class BallotPaper
{
      private:
          PositionType _positionbp;
      std::vector<Candidate> _candidatesbp;   // only contain the required candidate
      public:
          BallotPaper::BallotPaper(PositionType a)
          {
             _positionbp = a;
          }

          std::vector<Candidate>& BallotPaper::getCandidates()
          {
              return this->_candidatesbp;
          }

         void BallotPaper::AddCandidate(Candidate c)
         {
             _candidatesbp.push_back(c);
         }

         void BallotPaper::ChoiceVoted(int index)
         {
             getCandidates()[index].IncreaseVoteCount();
         }
}

1 个答案:

答案 0 :(得分:3)

在程序中创建的候选者将被复制到Voter v中的向量中。您应该使用v1.getBallotPapers()检查计数。

一种更简单的解决方案体系结构是将所有Candidate个对象保留在 vector 中,其他矢量存储Candidate *,因此它们可以引用{ {1}}。