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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
#1

Лист указателей на объект - C++

30.01.2011, 22:06. Просмотров 1277. Ответов 13
Метки нет (Все метки)

Не получается создать лист указателей на мой объект.
C++
1
list<&My_Object> my_list;
error: list<&My_Object> my_list;

Как это реализовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1923 / 1532 / 139
Регистрация: 31.05.2009
Сообщений: 2,894
30.01.2011, 22:14     Лист указателей на объект #2
C++
1
list<My_Object*> my_list;
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
31.01.2011, 00:08  [ТС]     Лист указателей на объект #3
А как достучаться до объекта через вот такую комбинацию?

C++
1
list<list<Object>::iterator>::iterator It=object.begin();
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
31.01.2011, 00:59     Лист указателей на объект #4
Цитата Сообщение от BAIZOR Посмотреть сообщение
создать лист.
По-русски это называется «список».

Цитата Сообщение от BAIZOR Посмотреть сообщение
А как достучаться до объекта через вот такую комбинацию?

C++
1
list<list<Object>::iterator>::iterator It=object.begin();
Здесь просто нужно понимать, что разыменовывание итератора даст в результате другой итератор.
А зачем тебе такая гидра, если не секрет?
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
31.01.2011, 01:12  [ТС]     Лист указателей на объект #5
***It не проходит,я все варианты разыменования перепробовал и с разными комбинациями добавления ->

Например
*It->
**It->
***It->
***It.
**It.
*It.


Не секрет,у меня есть список итераторов(для уменьшения потребления ресурсов) которые хранят в себе объекты,и мне надо по этому списку перемещаться,нужен еще 1 итератор...

Добавлено через 8 минут
Я не правильно выразился...
да и в принципе по коду видно,а нужно это все для того чтобы объект класса в котором написана эта строка,мог видеть куда ему надо передавать сигнал дальше,а поскольку этих объектов очень много,и они очень густо связаны,то для оптимизации памяти я использую указатели(итераторы).
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
31.01.2011, 01:50     Лист указателей на объект #6
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
#include <iostream>
#include <list>
#include <string>
 
class Sentence {
    std::string str;
public:
    Sentence() : str("Nothing to say.") {}
    Sentence(const std::string & s) : str(s) {}
    void sayIt() const {
        std::cout << str << std::endl;
    }
};
 
int main(){
    std::list<Sentence *> list;
    list.push_back(new Sentence("Hello, world!"));
    list.push_back(new Sentence("Goodbye, world!"));
    
    for ( std::list<Sentence *>::const_iterator i = list.begin(); i != list.end(); ++i )
        (*i)->sayIt();
    
    return 0;
}
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
31.01.2011, 07:30  [ТС]     Лист указателей на объект #7
easybudda, вы по сути не поняли вопроса.
Мне надо исходник по получению элемента из вот такой комбинации:
C++
1
list<list<Object>::iterator>::iterator It=object.begin();
как из It в итоге выдрать объект Object?
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
31.01.2011, 11:54     Лист указателей на объект #8
BAIZOR, оператор «стрелка» (->) имеет более высокий приоритет, чем оператор разыменовывания. Нужно правильно расставить скобки.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
31.01.2011, 18:41  [ТС]     Лист указателей на объект #9
А вы бы не могли мне с этим помочь?
А то что-то уж никак не получается... =(
igorrr37
1618 / 1246 / 124
Регистрация: 21.12.2010
Сообщений: 1,903
Записей в блоге: 7
31.01.2011, 19:29     Лист указателей на объект #10
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>
using namespace std;
class Object{
    public:
        int val;
        friend ostream& operator<<(ostream& o, Object a){
            cout<<a.val;
        }
};
 
int main(){
    list<Object> l;
    Object o;
    for(int i=0; i<10; i++){
        o.val=i;
        l.push_back(o);
    }
    list<Object>::iterator it=l.begin();
    list<Object>::iterator it1=--l.end();
    list<list<Object>::iterator> object;
    object.push_back(it);
    object.push_back(it1);
    list<list<Object>::iterator>::iterator It=object.begin();
    for(It=object.begin(); It!=object.end(); It++){
        cout<<**It<<"  ";
    }
}
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
31.01.2011, 22:22  [ТС]     Лист указателей на объект #11
igorrr37, **It (а дальше мне нужная функция внутри объекта).use
Но,сразу после (.) у меня открываются подсказки(что можна юзать после точки) и это итератор =\
igorrr37
1618 / 1246 / 124
Регистрация: 21.12.2010
Сообщений: 1,903
Записей в блоге: 7
31.01.2011, 22:32     Лист указателей на объект #12
C++
1
(**It).use();
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
31.01.2011, 22:42  [ТС]     Лист указателей на объект #13
igorrr37, Огромной спасибо! Никогда не знал что есть даже такой синтаксис о_О
а не могли бы вы мне его объяснить?

Добавлено через 3 минуты
секундочку... муть: error C2228: left of '.use' must have class/struct/union
use of undefined type 'Synaptic'

Synaptic (Object)

Добавлено через 2 минуты
насколько я понял,то пред инициализации(или как это называется)класса не достаточно что бы использовать его функции?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2011, 23:05     Лист указателей на объект
Еще ссылки по теме:

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? C++
компилятор считает объект l-value, но объект таковым не является C++
C++ Загадка указателей
C++ Сравнение указателей
C++ Что возвращать из vector-a указателей, если объект не найден?

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

Или воспользуйтесь поиском по форуму:
igorrr37
1618 / 1246 / 124
Регистрация: 21.12.2010
Сообщений: 1,903
Записей в блоге: 7
31.01.2011, 23:05     Лист указателей на объект #14
Цитата Сообщение от BAIZOR Посмотреть сообщение
а не могли бы вы мне его объяснить?
(**It).use();
После первого разыменования получаем тот итератор, на который ссылается данный итератор,
второе разыменование применяется уже к тому итератору поэтому получаем сам объект. Скобки
нужны т.к. оператор точка имеет больший приоритет чем *.
Yandex
Объявления
31.01.2011, 23:05     Лист указателей на объект
Ответ Создать тему
Опции темы

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