打印并存储到类型类的矢量

printing and storing to vector of type class

本文关键字:类型 存储 打印      更新时间:2023-10-16

我想将p1和p2的值存储到向量vip中,并使用以下代码打印vip:

#include <iostream>
#include <vector>
#include "Person.h"
#include "Daglejer.h"
#include "Funktionaer.h"
using namespace std;
int main() {
    Person p1("Mads", 21);
    Person p2("Carl", 23);
    Person p3("Thomas", 32);
    Person p4("Magnus", 8);
    Person p5("Joe", 81);
    vector <Person>vip;
    vip.push_back(p1);
    vip.push_back(p2);
    vector<Person>::iterator i;
    for(i = vip.begin(); i != vip.end(); i++)
        cout << vip[i];
    return 0;
}

头文件Person.h包含以下内容:

#ifndef PERSON_H_
#define PERSON_H_
#include <string>
using namespace std;
class Person {
private:
    string navn;
    int alder;
public:
    Person(string, int);
    Person();
    void setNavn(string);
    string getNavn();
    void setAlder(int);
    int getAlder();
};
#endif /* PERSON_H_ */

和cpp文件:

#include "Person.h"
using namespace std;
Person::Person(){
}
Person::Person(string name, int age) {
setNavn(name);
setAlder(age);
}
void Person::setNavn(string name){
navn = name;
}
void Person::setAlder(int age){
alder = age;
}
string Person::getNavn(){
    return navn;
}
int Person::getAlder() {
    return alder;
}

当我编译时,我得到以下错误:

"operator[]"不匹配(操作数类型为"std::vector"answers"std:::vector::迭代器{aka__gnu_cxx::__normal_iterator>}")

在我使用cout的线路上。我在stackoverflow和其他几个网站上搜索了很多,但给出的解决方案并没有解决我的问题。我希望有人能帮助我。提前谢谢。马德斯。

在列表上迭代时不需要调用下标运算符,只需取消对迭代器本身的引用即可。

for(i = vip.begin(); i != vip.end(); i++)
        cout << *i;

此外,您将需要添加<lt;到Person,或者只调用您想要显示的getter。

for(i = vip.begin(); i != vip.end(); i++)
        cout << i->getNavn();

ostream不知道Person应该输出到什么。您需要重载ostream或引用您想要的字段。

即:

cout << i->getNavn() << " " << i->getAlder() << endl;

ostream& operator<<(ostream& os, const Person& p)
{
    os << p.getAlder() << '--' << p.getNavn() << endl;
    return os;
}