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

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

Войти
Регистрация
Восстановить пароль
 
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
#1

Не удается обменяться значением объекта между массивами указателей - C++

24.11.2014, 14:37. Просмотров 137. Ответов 2
Метки нет (Все метки)

Добрый день.
Идея моей программы следующая. Необходимо создать сетку с квадратными ячейками для численных расчетов. Сетка состоит из узлов и ребрами между узлами, тем самым образуя ячейки. Размер сетки: по высоте - 100 узлов (или 99 ячеек), по ширине - 200 узлов (199 ячеек). У каждого узла свои координаты(сейчас пока не интересны) и свое значение в узле ("value"). Вот код на классы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class node
{public:
   node();
   ~node();
   int number;   //номер узла
   int a, b; //абсолютные координаты как в жизне
   double value;  //значение в узле
 private:
};
//-------------------Конструктор-----------------------
   node::node() {a=999999; b=999999; value=77777;};
//-------------------Деструктор-------------------------
   node::~node() {};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class edge
{public:
   edge();                //конструктор
   ~edge();          //деструктор
   node node1, node2; //узлы
   int nomer; //номер ребра: 0-верхнее, 1-правое, 2-нижнее, 3-левое
  private:
};
//-------------------Конструктор
   edge::edge()
      { };
//-------------------Деструктор------------------------------------------------
   edge::~edge() {};
В с++ сетку создаю в два этапа:
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
//----------объявление ДВУХмерного массива указателей типа node-----------------
node **pMassivUzlov=new node * [100];  //выделяем память. Число узлов по высоте ограничено количеством 100
for (int stroka=0; stroka<100; stroka++)  
      {
      pMassivUzlov[stroka]=new node [200]; //выделяем память. Число узлов по ширине ограничено количеством 200
      };
int i=1; //промежуточная переменная
//----------заполнение массива указателей pMassivUzlov значениями---------------
for (int stroka=0; stroka<100; stroka++)
     {for (int stolb=0; stolb<200; stolb++)
           {
            pMassivUzlov[stroka][stolb].value=i; //присваиваем значение для "value"
            pMassivUzlov[stroka][stolb].a=i*10;  //формула для координаты "a"
            pMassivUzlov[stroka][stolb].b=i*100;  //формула для координаты "b"
            i++;
           };
     };
//----------объявление ТРЕХмерного массива указателей типа edge-----------------
edge ***pMassivReber=new edge ** [100];  //выделяем память. Число ячеек по высоте ограничено количеством 100
 
 for (int stroka=0; stroka<100; stroka++)
     {
         pMassivReber[stroka]=new edge *[200]; //выделяем память. Число ячеек по ширине ограничено количеством 200
         for (int stolb=0; stolb<200; stolb++)
             {
              pMassivReber[stroka][stolb]=new edge [4]; //выделяем память. Число ребер в ячейке ограничено 4-мя(сверху, справа, снизу, слева)
             };
     };
//----------заполнение массива указателей pMassivReber значениями---------------
     for (int stroka=0; stroka<100; stroka++)      //заполнение массива указателей значениями
     {for (int stolb=0; stolb<200; stolb++)
           {for (int rebro=0; rebro<4; rebro++)
               {if (rebro==0)  //присваиваем верхние узлы ребру 0(верхнее)
                        {
/*ошибка здесь*/         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb];  // узел 0
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka+1][stolb+1];  //узел 1
                         pMassivReber[stroka][stolb][rebro].nomer=0;
                         };
               if (rebro==1)  //присваиваем правые узлы ребру 1(правое)
                        {
                         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb+1];  // узел 1
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka][stolb+1];  //узел 2
                         pMassivReber[stroka][stolb][rebro].nomer=1;
                        };
               if (rebro==2)  //присваиваем нижние узлы ребру 2(нижнее)
                        {
                         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka][stolb+1];  // узел 2
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka][stolb];  //узел 3
                         pMassivReber[stroka][stolb][rebro].nomer=2;
                        };
               if (rebro==3)  //присваиваем левые узлы ребру 3(левое)
                        {
                         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka][stolb];  // узел 3
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka+1][stolb];  //узел 0
                         pMassivReber[stroka][stolb][rebro].nomer=3;
                        };
               }
           }
     };
delete[] pMassivUzlov;
delete[] pMassivReber;
По задумке, массив указателей на ребра должен извлекать данные из массива указателей на узлы.
Компилирует без проблем. А вот проблема возникает при выполнении: ошибка - на картинках, подсвечивает строку 35.
Не удается обменяться значением объекта между массивами указателейНе удается обменяться значением объекта между массивами указателей
Помогите разобраться в чем (или в ком) дело. Или дайте хотя бы наводку, где искать ответ. Спасибо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 14:37     Не удается обменяться значением объекта между массивами указателей
Посмотрите здесь:

Использование указателей при работе с одномерными массивами - C++
Реализовать на Си. Даны натуральное число n, действительные числа a1,...,an. Если последовательность a1,...,an упорядочена по...

Сложность с константным значением (массив указателей на функцию) - C++
Всем привет. Прошу помощи. Задача такая: Реализовать функцию сортировки методом вставки. В качестве условия должна быть описана...

Использование указателей при работе с одномерными и двумерными массивами. - C++
Кто может решить. Даны натуральное число n,действительные числа X1,...,Xn.Вычислить: (X1+X2+2Xn)(X2+X3+2Xn-1)...(Xn-1+Xn+X2) Язык...

Использование указателей при работе с одномерными и двумерными массивами - C++
Даны натуральное число n, действительные числа A1......An . Если в последовательности A1.....An есть хотя бы один член, меньший, чем -3,...

Использование указателей при работе с одномерными и двумерными массивами - C++
Даны натуральное число n, действительные числа a1, ..., an. Преобразовать последова-тельность a1, ..., a2n, расположив вначале...

Реализовать класс для работы с одномерными массивами указателей строк - C++
всем привет. помогите пожалуйста не могу написать прогу по заданию. реализовать класс для работы с одномерными массивами указателей...

Найти среднее арифметическое между максимальным значением матрицы и максимальным значением массива - C++
Заданы матрица и массив. Определить среднее арифметическое между максимальным значением элементов матрицы и максимальным значением...

Как правильно? (поиск объекта в массиве указателей) - C++
Здравствуйте, никак не могу сформировать четкое представление как находить конкретный объект из массива указателей. Есть значит массив...

Возврат объекта с полями-массивами в функцию - C++
Есть вот такой код: #include&lt;iostream&gt; using namespace std; const int MAX=9; class Money {

Разница между объявлениями указателей - C++
Есть такое: int *p; и такое: int *p = new int; Поясните, пожалуйста, в чём разница между этими объявлениями указателей?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6277 / 5880 / 1902
Регистрация: 18.12.2011
Сообщений: 15,080
Завершенные тесты: 1
24.11.2014, 14:52     Не удается обменяться значением объекта между массивами указателей #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gnetov Посмотреть сообщение
pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb];
Когда stroka равно 99, чему равно stroka+1 ?????????????????
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
24.11.2014, 15:45  [ТС]     Не удается обменяться значением объекта между массивами указателей #3
Цитата Сообщение от zss Посмотреть сообщение
Когда stroka равно 99, чему равно stroka+1 ?????????????????
ничему не равна! Спасибо, тему закрываем!
Yandex
Объявления
24.11.2014, 15:45     Не удается обменяться значением объекта между массивами указателей
Ответ Создать тему
Опции темы

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