2014-02-11 2 views
2

Я хочу хранить объекты на векторах. Но я не знаю, почему это не работает.C++, Объекты на векторе

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

У меня есть класс Persona в файле Persona.h. И он имеет только два метода: Конструктор по умолчанию и метод, называемый 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(); 
    } 
} 

Я думаю, что проблема в том, как я пытаюсь вызвать «р». Правильно, что я пытаюсь использовать const_iterator вместо любого другого типа?

+0

'р <= personas.end()' 'должно быть <'. Также 'p' является итератором, поэтому вы должны использовать' -> ', а не' .' на итераторе для доступа к членам класса. – user3286380

+0

Вы рассматривали любые ссылки на использование итераторов? – chris

+1

@ user3286380, Это должно быть '! =', Действительно. – chris

ответ

1

Вы пытаетесь вызвать метод non-const для объекта const (объект, на который ссылается константный итератор). Поскольку метод mensaje() не изменяет объект, он должен быть объявлен сопзЬ, например, так:

void Persona::mensaje() const; 

После внесения этого изменения, вы должны быть в состоянии вызвать метод на константный объект (ссылка) вернулся из const iterator.

(... в дополнение к другим синтаксических ошибок, упомянутых в других ответах.)

3

p является итератор не сам объект, вам нужно разыменовать ему:

(*p).mensaje(); 

ИЛИ

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

Смежные вопросы