2014-02-11 113 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