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

Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
08.10.2011, 20:50     Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему? #1
Друзья! Короче создал ПРОСТОЙ класс всего с одним полем и функцией которая выводит значение этого поля. Создал массив из 2-х указателей на объекты такого класса. После корректно этот массив инициализировал.
А после на основе массива указателей создал список из указателей. И вот тут-то ничего не получатся.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <string>
#include <list>
using namespace std;
 
 
//Это вот будет описание типа; очень простое
class type {
 public:
  type (int);
  ~type () {};
 
 //Эта вот функция возвращает x
 int f () {return x;};
 
 private:
  int  x;
};
 
//ЭТо вот конструктор просто устанавливает x в нужное значение и всё
type::type (int nomer) {
 x= nomer;
};
 
 
 
int main() {
 
 //Кропаем список из 2-х указателей.
 type** p= new type* [2];
 
 
 //Теперь каждый указатель проинициализируем конкретным объектом типа type
 //То есть будут объекты со значениями 0 и 1
 for (int i= 0; i< 2; i++) {
  p[i]= new type (i);
 }
 
 //ПРоверим
 printf ("%d    \n", (*p[0]).f());
 printf ("%d    \n", (*p[1]).f());
 //Всё корректно
 
 //Теперь скропаем список из указателей
 list<type*> List (p, p + sizeof(p) / sizeof(type*));
 
 //И выведем значения, сперва так
 printf ("%x\n", (**List.begin()).f());
 
 //Ага, а теперь объявим итератор...
 list<type*>::iterator itr= List.begin();
 
 //проверим
 printf ("%x\n", (**itr).f());
 
 
 // и инкременируем его
 itr++;
 
 //Теперь по идее должна итератр должен указывать на адрес второго объекта
 //а ни фига подобного, выводится не единица, а вылетает исключение, почему?
 printf ("%d\n", (**itr).f());
 
 getchar ();
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2011, 20:50     Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему?
Посмотрите здесь:

C++ Определить минимал элемент и поменять его местами с первым элементом
Найти максимальный элемент стека и поменять его местами с первым элементом C++
Почему в приведенном коде всегда первым отрицательным элементом является нулевой элемент C++
C++ Найти максимальный элемент и поменять его с первым элементом
Если номер минимального массива больше 5, поменять его местами с первым элементом C++
В вещественном векторе найти наибольший элемент и поменять его с первым элементом C++
Поменять местами максимальный элемент матрицы с его первым элементом а минимальный с последним C++
C++ В функцию через указатель передаётся массив ТОЛЬКО с первым[0] элементом

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
08.10.2011, 21:14     Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему? #2
Цитата Сообщение от kravam Посмотреть сообщение
C++
1
sizeof(p) / sizeof(type*)
Размер динамического массива таким образом получить невозможно. sizeof(p) вернёт размер указателя, а не размер массива в байтах. Правильно бьло бы сделать так
C++
1
2
3
4
const size_t n = 2;
type** p= new type* [n];
//...
list<type*> List (p, p + n);
Yandex
Объявления
08.10.2011, 21:14     Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему?
Ответ Создать тему
Опции темы

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