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

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

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
#1

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

08.10.2011, 20:50. Просмотров 351. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2011, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список указателей на авторские объекты, я могу воспользоваться только первым его элементом. Почему? (C++):

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

В функцию через указатель передаётся массив ТОЛЬКО с первым[0] элементом - C++
Считал, что передавая указатель на массив, в функции буду иметь весь массив, но передаётся массив с ОДНИМ элементом. В чём может быть...

Найти максимальный элемент и поменять его с первым элементом - C++
В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение. Массив...

Почему в приведенном коде всегда первым отрицательным элементом является нулевой элемент - C++
Я туплю и не понимаю почему он всегда первым отрицательным элементом берёт нулевой элемент. Исправьте, пожалуйста, чтобы работала...

Определить минимал элемент и поменять его местами с первым элементом - C++
int i, A, min, max, n; for (i=0; i&lt;15; i++) A=StrToFloat(Memo1-&gt;Lines-&gt;Strings); min=A; for (i=1.; i&lt;15; i++) if (min&gt;A) ...

В вещественном векторе найти наибольший элемент и поменять его с первым элементом - C++
Буду очень признателен за помощь.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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);
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 21:14
Привет! Вот еще темы с ответами:

Найти минимальный элемент матрицы, и поменять его местами с первым элементом - C++
вот задание: Найти минимальный элемент матрицы С (размер m*n), и поменять его местами с первым элементом. #include&lt;stdio.h&gt; ...

Найти максимальный элемент стека и поменять его местами с первым элементом - C++
Информационное поле элемента стека числовое. Найти максимальный элемент стека и поменять его местами с первым элементом стека.

Поменять местами максимальный элемент матрицы с его первым элементом а минимальный с последним - C++
ДВУМЕРНЫЙ МАССИВ: Поменять местами максимальный элемент матрицы F(k,p)в его первым элементом, а минимальный элемент – с последним. Найти...

Если номер минимального массива больше 5, поменять его местами с первым элементом - C++
Здравствуйте, Люди очень прошу вашей помощи в решении данной задачи, что то не хватает фантазии перевести её в программный код. Заранее...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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