Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Доступ к членам класса в deque


Автор: IKM2007 30.7.2009, 13:30
Доброго дня. Вопрос: как обращатся к открытым членам класса из deque?
Код:
Код

#include <iostream>
#include <string>
#include <deque>
#include <algorithm>

class Person
{
public:
    Person(const std::string a, const std::string b)
    {
    name = a;
    surname = b;
    }

    std::string name;
    std::string surname;
};

bool PersonSort(const Person& p1, const Person& p2)
{
    return p1.surname < p2.surname ||
        !(p2.surname < p1.surname) && p1.name < p2.name;
}

void main()
{
    std::deque<Person> coll;
    coll.push_back(Person("Robert", "Sheckley"));
    coll.push_back(Person("Harry", "Harrison"));

    std::sort(coll.begin(), coll.end(), PersonSort);

    std::deque<Person>::const_iterator pos;
    pos = coll.begin();
    std::cout<<*pos->name<<' '<<*pos->surname<<'\n';//2 error-а : error C2100: illegal indirection
    *(++pos);
    std::cout<<*pos->name<<' '<<*pos->surname<<'\n';//2 error-а : error C2100: illegal indirection

}

Дает четыре ошибки.(в комментах написано) Что я делаю не так? И как правильно?

Автор: azesmcar 30.7.2009, 13:33
Цитата(IKM2007 @  30.7.2009,  13:30 Найти цитируемый пост)
    std::cout<<*pos->name<<' '<<*pos->surname<<'\n';//2 error-а : error C2100: illegal indirection
    *(++pos);
    std::cout<< pos->name<<' '<< pos->surname<<'\n';//2 error-а : error C2100: illegal indirection

замени на
Код

std::cout<< pos->name << ' ' << pos->surname << '\n'; //2 error-а : error C2100: illegal indirection
*(++pos);
std::cout<< pos->name << ' ' << pos->surname << '\n'; //2 error-а : error C2100: illegal indirection

разыменование тут не нужно.

Автор: IKM2007 30.7.2009, 13:38
azesmcar, спасибо. Сработало. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)