我想使用以下代码将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。
答案 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;
}