昨晚我对矢量配对的问题得到了答复:)
然而,我有一个新问题。在我的例子中,我在我的类中声明了一个toString()方法,如下所示。
string toString() {
stringstream info;
info << "Name : " << getName() << "\nSubject: " << getSubject() << "\nResult : " << getGrade() << endl << endl;
return info.str();
}
接下来,我有一个矢量和打印代码如下:
vector<pair<Student*, string>> Students;
//...
Students.push_back(make_pair(Abbie, Abbie->getGrade(80)));
//...
for (int i = 0; i < Students.size(); i++)
{
cout << Students[i]->toString() << endl;
}
显然,成绩未被捕捉,并且没有被打印。
如果我有一个toString(),我不应该这样做吗?如果不是,我可以知道我该怎么做吗?
任何人都可以提供帮助? :)
编辑:我找到了错误来源 - 我使用'=='代替'='来分配值。但是,谢谢大家的帮助
答案 0 :(得分:1)
我想
Abbie->getGrade(80)
只是将int转换为字符串,而不是将任何数据分配给对象。如果是这样,请在此处:
Students.push_back(make_pair(Abbie,Abbie->getGrade(80)));
你的&#34;成绩&#34;仅存储在pair.second中,但不存在于Abbie本身,因此打印类信息不会打印出值
Abbie->getGrade(80)
答案 1 :(得分:0)
如果按照您的提法定义了toString()
方法,则Student类必须具有“name,subject和grade”成员,因此该类应如下所示:
class Student
{
public:
Student(std::string name_, std::string subject_, std::string grade_) // Let's just use string everywhere to keep the example simple
: name(name_)
, subject(subject_)
, grade(grade_)
{}
std::string getName() { return name; }
std::string getSubject() { return subject; }
std::string getGrade() { return grade; }
std::string toString();
private:
std::string name;
std::string subject;
std::string grade;
}
现在,当您创建“Abbie”时,您应该使用所需的所有信息:
Student * Abbie = new Student("Abbie", "Math", "80");
你们其余的代码现在应该可以使用了,但我想指出一些事情:
如果Student
类有一个返回其所有成员的方法,那么你真的不需要成对的向量:
vector<Student*> Students;
Students.push_back(Abbie);
for (int i = 0; i < Students.size(); i++)
{
cout << Students[i]->toString() << endl; // Now you can use this without the "first" I mentioned in a comment up there
}
还有一件事,toString()
方法属于Student
类,因此它可以访问自己的成员,因此无需调用getter来获取值:
std::string toString()
{
stringstream info;
info << "Name : " << name << "\nSubject: " << subject << "\nResult : " << grade << endl << endl;
return info.str();
}
注意:但是这应该可以正常使用toString()
打印所有内容,问题的标题是“从矢量打印一对”。如果这真的是你需要解释的那么你应该按照 Dylan James McGannon 在评论中告诉你的那样。