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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Операции сдвига http://www.cyberforum.ru/cpp-beginners/thread1309347.html
Через операторы сдвига можно в одну переменную поместить несколько значений. int A = 0; int b = {44,45,46}; A = (int)(b|b<<4|b<<8); for (int i=0;i<3;i++) { b = 0; } А как вытащить обратно эти значения в переменные b?
C++ Error C4996: 'strcpy' :cry::wall::rtfm:%-) Нужна помощь! error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Как исправить? Работаю в VS 13 #include<iostream> http://www.cyberforum.ru/cpp-beginners/thread1309340.html
C++ PDF to XPS
Всем привет. Давно интересует вопрос: Нет ли у кого на примете библиотеки, для перевода PDF документа в XPS формат ? Желательно бесплатную. Лучше с исходным кодом. Которую можно использовать в своей программе. Или компонент под любой фреймворк подойдет. Язык даже не важен. Много чего находил, и использовал: парсеры, редакторы, экстракторы,. А с этим вопросом пока не очень...
Найти интеграл C++
Добрый день. Помогите написать код для решения следующей задачи. Вычислить интеграл при а = 0,019; 0.127; 0.346; 0.417; 0.527; 0.696, используя формулу Симпсона с шагом h=0,001 Заранее благодарен за ответ. Внизу страницы есть редактор формул!
SFML Code Blocks и sfml http://www.cyberforum.ru/cpp-beginners/thread1309308.html
Не могу подружить данный компилятор с SFML при компоновке нет ошибок а при запуске программы пишет не найдена: sfml graphics 2.dll В чем загвоздка?
C++ Определить количество ненулевых значений Хелп профи. Всю голову уже сломал. Ввести с клавиатуры n целых чисел и определить количество ненулевых значений. Ввод чисел обсепечить с клавиатуры в цикле с помощью операторов for, while, do while на языке С. подробнее

Показать сообщение отдельно
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
24.11.2014, 14:37     Не удается обменяться значением объекта между массивами указателей
Добрый день.
Идея моей программы следующая. Необходимо создать сетку с квадратными ячейками для численных расчетов. Сетка состоит из узлов и ребрами между узлами, тем самым образуя ячейки. Размер сетки: по высоте - 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.
Не удается обменяться значением объекта между массивами указателейНе удается обменяться значением объекта между массивами указателей
Помогите разобраться в чем (или в ком) дело. Или дайте хотя бы наводку, где искать ответ. Спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru