Печать пары из вектора

вчера вечером на мой вопрос о векторном сопряжении был дан ответ 🙂

Однако у меня новая проблема. В моем случае у меня есть метод 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 ()? Если нет, могу ли я знать, как мне это сделать?

Кто-нибудь может помочь? 🙂

Изменить: я нашел свой источник ошибки — я назначил значения, используя «==» вместо «=». Но тем не менее, спасибо всем за попытку помочь

-2

Решение

Похоже

Abbie->getGrade(80)

просто конвертирует int в строку, не присваивая никаких данных объекту. Если так, то здесь:

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

Ваша оценка оценивается только в pair.second, но не в самой Abbie, поэтому при печати информации о классе не печатается значение

Abbie->getGrade(80)
1

Другие решения

Если 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 класс, поэтому он имеет доступ к своим собственным членам, поэтому не нужно вызывать геттеры для получения значений:

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

НОТА: Однако это должно работать и распечатать все правильно, используя toString(), заголовок вашего вопроса был «Печать пары из вектора». Если это действительно то, что вам нужно объяснить, вы должны сделать это как Дилан Джеймс Макганнон сказал вам в комментарии.

0

По вопросам рекламы [email protected]