gpt4 book ai didi

c++ - 尝试通过多个 vector 访问变量时 vector 下标超出范围

转载 作者:行者123 更新时间:2023-11-30 04:55:13 26 4
gpt4 key购买 nike

在发布此错误之前,我已经检查过我没有尝试访问超出范围的 vector 成员,是的, vector 的第一个成员以索引 0 开始并以( vector 大小 - 1)结束

我已经删除了不相关的代码以显示我的错误。

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.getBallotPaper(0).getPositionBP() == PositionType::President)
{
cout << "\nTrue2\n"; //Yes
}

Candidate c1("Kookie", 100, "Engineering", 012, d1, PositionType::Normal);
bp1.AddCandidate(c1);
if (bp1.getCandidate(0).getName() == "Kookie")
{
cout << "\nTrue3\n"; // Yes
}

//cannot reach to candidate
if (v1.getBallotPaper(0).getCandidate(0).getName() == "Kookie")
{
cout << "\nTrue4\n"; //error!
}

这是相关类(class)的源文件:对于选民类:

class Voter :public Member
{
private:
std::vector<BallotPaper> _bp; //use vector for simple iteration
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);
}

BallotPaper Voter::getBallotPaper(int index)
{
return _bp[index];
}
}

对于选票类:

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

void BallotPaper::AddCandidate(Candidate c)
{
_candidatesbp.push_back(c);
}
PositionType BallotPaper::getPositionBP()
{
return _positionbp;
}
Candidate BallotPaper::getCandidate(int index)
{
return _candidatesbp[index];
}
}

对于候选类:

class Candidate :public Member
{
private:
int _votecount;
PositionType _position;
public:
Candidate::Candidate(std::string a, int b, std::string c, int d, Date e, PositionType f) : Member(a, b, c, d, e, f)
{
_votecount = 0;
}
}

父类:成员文件

Member::Member(std::string name, int id, std::string course, int contact, Date joindate, PositionType currentposition)
{
_name = name;
_id = id;
_course = course;
_contact = contact;
_joindate = joindate; //in the format of 2018/10/22
_currentposition = currentposition;
}
void Member::setName(std::string name)
{
_name = name;
}
std::string Member::getName()
{
return _name;
}

它似乎无法从一个类的 vector 的 vector 中获取成员变量。非常感谢任何意见!

最佳答案

当您将某些内容push_back 到 vector 中时,您就创建了一个拷贝。

此行:v1.AddBallotPaper(bp1); 创建了 bp1 的拷贝并将其附加到 v1 内部的 vector 。< br/>稍后,当您通过执行 bp1.AddCandidate(c1); 更改 bp1 时,存储在 v1 中的拷贝不会受到影响。

关于c++ - 尝试通过多个 vector 访问变量时 vector 下标超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com