打印和存储到类型的矢量

时间:2014-04-22 14:43:54

标签: c++ class object vector

我想使用以下代码将p1和p2的值存储到vector 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;
}

编译时出现以下错误:

  

不匹配&#39;运营商[]&#39; (操作数类型是&#39; std :: vector&#39;和&#39; std :: vector :: iterator {aka __gnu_cxx :: __ normal_iterator&gt;}&#39;)

在我使用cout的行。我在stackoverflow和其他几个网站上搜索了很多,但是给出的解决方案并没有解决我的问题。我希望有一个人可以帮助我。 提前致谢。 MADS。

2 个答案:

答案 0 :(得分:4)

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

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

此外,您还需要添加&lt;&lt;&lt;&lt;&lt;&lt;对于Person,或者只是根据你想要显示的内容调用getter。

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

答案 1 :(得分:0)

ostream没有Person应该输出的概念。您需要重载ostream或引用您想要的字段。

即,或者:

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

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