【问题标题】:Printing a pair from a vector从向量打印一对
【发布时间】:2016-04-16 14:38:13
【问题描述】:

昨晚我关于向量配对的问题得到了解答:)

但是,我有一个新问题。在我的例子中,我在我的类中声明了一个 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(),我不应该这样 cout 吗?如果不是,我可以知道我应该怎么做吗?

有人可以帮忙吗? :)

编辑:我找到了我的错误来源 - 我使用“==”而不是“=”来分配值。不过还是谢谢大家帮忙

【问题讨论】:

  • getGrade() 是否返回它所支持的内容? *Abbie中存储的数据是否正确?还有更多我们没有看到的相关代码。
  • 是的。我怀疑这不是我应该采用的方式。这就是我发布问题的原因......
  • 好吧,当您尝试 cout 时,您错过了“第一个”,开始指出一些事情。 cout &lt;&lt; Students[i].first-&gt;toString() &lt;&lt; endl; 如果你告诉我这段代码可以编译,我会很惊讶。
  • 我确实尝试过'cout toString() toString();'但是我收到了一个指针类型错误。我猜我第一个只有两个元素,第二个元素有一个冲突。
  • 第一个元素是指针,第二个元素不是这样 try 'cout toString()

标签: c++ printing cout pairing


【解决方案1】:

我猜

Abbie->getGrade(80)

只是将 int 转换为字符串,而不是为对象分配任何数据。如果是这样,在此处:

 Students.push_back(make_pair(Abbie,Abbie->getGrade(80)));

您的“成绩”仅存储在 pair.second 中,而不存储在 Abbie 本身中,因此打印类信息不会打印

Abbie->getGrade(80)

【讨论】:

  • 有办法解决这个问题吗?
【解决方案2】:

如果 toString() 方法如您所述定义,则 Student 类必须具有成员“姓名、学科和年级”,因此该类应如下所示:

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 在评论中告诉您的那样去做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2015-11-13
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多