-2

昨夜、ベクトルペアリングに関する私の質問に答えました:)

しかし、私には新たな問題があります。私の場合、クラスで次のように宣言された 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() がある場合、このように計算する必要はありませんか? そうでない場合、どのようにすればよいか教えていただけますか?

誰でも助けることができますか?:)

編集: エラーの原因が見つかりました - 「=」の代わりに「==」を使用して値を割り当てました。それにもかかわらず、助けようとしてくれてありがとう

4

2 に答える 2

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
}

もう1つ、toString()メソッドはクラスに属しているStudentため、独自のメンバーにアクセスできるため、値を取得するためにゲッターを呼び出す必要はありません:

std::string toString() 
{
  stringstream info;
  info << "Name   : " << name << "\nSubject: " << subject << "\nResult : " << grade << endl << endl;
  return info.str();
}

注:ただし、これは機能し、を使用してすべてを正しく印刷する必要toString()があります。質問のタイトルは「ベクトルからペアを印刷する」でした。これが本当に説明が必要な場合は、Dylan James McGannonがコメントで言ったように、それを行う必要があります。

于 2016-01-12T13:14:37.210 に答える