2014-02-11 112 views
2

我想在矢量上存储对象。但我不知道为什么它不起作用。C++,矢量上的对象

‪#‎include‬ <iostream> 
#include <vector> 
using namespace std; 

我在Persona.h文件中有一个Persona类。它只有两种方法: 默认构造函数和一个名为mensaje()的方法都是公共的,它没有任何私有成员。

#include "Persona.h" 

int main() 
{ 
    vector<Persona> personas; 
    Persona persona1; 
    Persona persona2; 

    personas.push_back(persona1); 
    personas.push_back(persona2); 

    vector<Persona>::const_iterator p; 

    for(p = personas.begin(); p <= personas.end(); p++) { 

这里就是我得到错误信息

 p.mensaje(); 
    } 
} 

我认为问题是,我想打电话给“P”的方式。 是否正确尝试使用const_iterator而不是其他类型?

+0

'p <= personas.end()'应该是'<'。另外'p'是一个迭代器,因此您应该在迭代器上使用' - >'而不是'.'来访问类的成员。 – user3286380

+0

你看过关于如何使用迭代器的任何参考吗? – chris

+1

@ user3286380,它应该是'!=',真的。 – chris

回答

1

您试图在const对象(由const迭代器引用的对象)上调用非const方法。由于mensaje()方法不修改对象,应该声明为const,就像这样:

void Persona::mensaje() const; 

进行此更改后,你应该能够调用const对象(引用)的方法从返回常量迭代器。

(...除了在其他答案中提到的其他语法错误。)

3

p的迭代器不是对象本身,则需要取消对它的引用:

(*p).mensaje(); 

OR

p->mensaje(); 

而且

更新:

for(p = personas.begin(); p <= personas.end(); p++) { 

到:

for(p = personas.begin(); p != personas.end(); p++) { 
          ^^^^^^ 
+0

我不工作.____。该mensaje方法是这样的: void Persona :: mensaje() { cout <<“Hola desde mensaje()”<< endl; } – mishelashala

+0

@ user3053929你需要使函数为const。 – billz