Форум программистов, компьютерный форум CyberForum.ru

std::list<T*> вызвать метод - C++

Восстановить пароль Регистрация
 
Matrasa
 Аватар для Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
20.01.2013, 21:20     std::list<T*> вызвать метод #1
Как во время просмотра MyList вызвать метод Show() каждого обьекта?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MyVehicle
{
    public:
    virtual void Show() { /* ... */ }
};
 
class MyCar : public MyVehicle
{
    public:
    void Show() { /* ... */ }
};
 
int main()
{
 
std::list<MyVehicle*> MyList;
MyCar mc;
MyVehicle *mv = &mc;
MyList.push_back(mv);
 
std::list<MyVehicle*>::iterator iter = MyList.begin();
 
//Просматриваем MyList
for(int i = 0; i < MyList.size(); i++)
{
    //iter.Show();
    //iter->Show();
    //*iter->Show();
    //(*iter)->Show();
    //Как вызвать метод Show()??
    iter++;
}
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2013, 21:20     std::list<T*> вызвать метод
Посмотрите здесь:

Вопросы по std::list C++
C++ Вопрос по std::list
C++ Сортировка std::list
Передача std::list<> в функцию C++
C++ Remove_if для std::list
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
20.01.2013, 21:29     std::list<T*> вызвать метод #2
C++
1
(*iter)->Show();
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
20.01.2013, 21:35     std::list<T*> вызвать метод #3
А в чем была проблема попробовать каждый из написанных тобою же вариантов, если уж не знаешь, как нужно?
Matrasa
 Аватар для Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
20.01.2013, 23:07  [ТС]     std::list<T*> вызвать метод #4
Croessmah, Не работает. Вот, для примера такой код, и он не работает (программа запускается и ничего не выводит)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <list>
 
class MyVehicle
{
    public:
    virtual void Show() {}
};
 
class MyCar : public MyVehicle
{
    public:
    void Show() {std::cout << "I'm a car!\n"; }
};
 
int main()
{
    std::list<MyVehicle*> MyList;
    MyCar mc;
    MyVehicle* mv = &mc;
 
    std::list<MyVehicle*>::iterator iter = MyList.begin();
 
    for(int i = 0; i < MyList.size(); i++)
    {
        (*iter)->Show(); iter++;
    }
}
ЗЫ. Код пишу под виндой в QtCreator.

Добавлено через 48 секунд
Герц, Я их все попробовал. Ни один не сработал.

Добавлено через 6 минут
Croessmah, А нет, все работает, забыл обьект закинуть в список. Спасибо за ответ!

Добавлено через 56 минут
Чейто я не пойму, предыдущий код работает, а вот такой сегфолтится. Помогите разобраться пожалуйста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <QtCore/QCoreApplication>
#include <list>
#include <iostream>
 
class MyVehicle
{
    public:
    virtual void Show() {}
};
 
class MyCar : public MyVehicle
{
    public:
    void Show() {std::cout << "I'm a car!\n"; }
};
 
class MyList
{
public:
    void AddCar()
    {
        MyCar mc;
        MyVehicle* mv = &mc;
        MyListOfVehicles.push_back(mv);
    }
 
    void PrintList()
    {
        std::list<MyVehicle*>::iterator iter = MyListOfVehicles.begin();
 
        for(int i = 0; i < MyListOfVehicles.size(); i++)
        {
            (*iter)->Show();
            iter++;
        }
    }
 
    std::list<MyVehicle*> MyListOfVehicles;
};
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    MyList ml;
    ml.AddCar();
    ml.PrintList();
 
    return a.exec();
}
Добавлено через 19 минут
Хмм, работает если я не создаю экземпляр MyCar внутри метода MyList, а передаю из main() в качестве параметра...
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
20.01.2013, 23:15     std::list<T*> вызвать метод #5
Matrasa, добрый вечер...
Про алгоритмы ничего не слышали?
C++
1
2
3
4
5
6
template<class InputIterator, class Function>
   Function for_each(
      InputIterator _First, 
      InputIterator _Last, 
      Function _Func
   );
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
20.01.2013, 23:18     std::list<T*> вызвать метод #6
Цитата Сообщение от Matrasa Посмотреть сообщение
C++
1
2
3
4
5
6
void AddCar()
{
    MyCar mc;
    MyVehicle* mv = &mc;
    MyListOfVehicles.push_back(mv);
}
mc в данном случае это локальная переменная. После того как метод отработает переменная выходит из области видимости и указатель на эту переменную становится недействительным.
Matrasa
 Аватар для Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
21.01.2013, 00:06  [ТС]     std::list<T*> вызвать метод #7
rangerx, Чейто я ступил, в самом же деле, после того как функция отработает mv указывает хрен знает куда!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 05:12     std::list<T*> вызвать метод
Еще ссылки по теме:

Static std::list C++
Реализация std::list, сложность list::size() C++
Непосредственное удаление из std::list C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.01.2013, 05:12     std::list<T*> вызвать метод #8
C++
1
2
3
4
5
6
7
8
9
10
void PrintList()
{
    std::list<MyVehicle*>::iterator iter = MyListOfVehicles.begin();
 
    for(int i = 0; i < MyListOfVehicles.size(); i++)
    {
        (*iter)->Show();
        iter++;
    }
}
Ну если уж выводим в цикле и начали использовать итераторы, то давайте уж до конца...
C++
1
2
3
4
5
6
7
8
void PrintList()
{ 
    for (std::list<MyVehicle*>::iterator it = MyListOfVehicles.begin(),
        end = MyListOfVehicles.end(); it != end; ++it)
    {
        (*it)->Show();
    }
}
Yandex
Объявления
21.01.2013, 05:12     std::list<T*> вызвать метод
Ответ Создать тему
Опции темы

Текущее время: 18:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru