C ++ :: Вызов метода класса с использованием векторного итератора? - PullRequest
2 голосов
/ 23 января 2011

У меня есть класс Room, класс Room имеет setPrice и функцию отображения.

Я хранил объекты комнаты в векторе:

room.push_back(Room("r001", 1004, 2, "small"));
room.push_back(Room("r002", 1005, 2, "small"));
room.push_back(Room("r003", 2001, 4, "small"));
room.push_back(Room("r004", 2002, 4, "small"));

В моей основной функции я создаю функцию отображения для отображения всех комнат. Вот мой код:

void displayRoom()
{
    vector<Room>::iterator it;
    for (it = room.begin(); it != room.end(); ++it) {
         *it.display(); // just trying my luck to see if it works
    }
}

Но он не вызывает метод отображения Комнаты.

Как вызвать метод отображения Room (class) (без аргумента) и метод setPrice (1 аргумент)?

Ответы [ 4 ]

10 голосов
/ 23 января 2011

Разыменование имеет более высокий приоритет, чем членский доступ.Вы можете добавить парены ((*it).display()), но вы должны просто использовать ярлык, который был введен давным-давно (в C) для этого: it->display().

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

3 голосов
/ 23 января 2011

Попробуйте (*it).display() или просто it->display().

1 голос
/ 23 января 2011

Итераторы немного похожи на указатели. Итак, вы хотите либо:

it->display();

или

(*it).display();
0 голосов
/ 01 марта 2019

Используя Vector, вы также можете использовать классическую форму

for(size_t x = 0; x < room.size(); x++) {
    room[x].display(); //for objects
    //room[x]->display(); //for pointers
}
...