Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 18.12.2012
Сообщений: 11
1

Breakpoint: при попытке вывести элементы класса указатель теряет начальное значение

26.11.2015, 20:41. Показов 701. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При попытке вывести элементы класса указатель теряет начальное значение.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
void Graph<T>::print()
{
    Vertex<T> *buf;
    for (int i = 0; i < numVer; i++)
    {
        buf = &graph[i];
        int k = buf->getVal();                              //Корректно работает
        std::cout << k << ": ";                            //breakpoint
        for (int j = 0; j < buf->getInc(); j++)
        {
            std::cout << buf->incident[j] << ";"; //incident треяет начальные значения
        }
        std::cout << endl;
    }
}
Весь код прикреплен документом
Вложения
Тип файла: zip main.zip (2.0 Кб, 1 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2015, 20:41
Ответы с готовыми решениями:

Ошибка при попытке использовать объект класса в определении другого класса
Муторное название получилось :scratch: Прошу помощи.... есть созданный класс работы со строкой: &quot;MyString.h&quot; class...

Начальное значение токов в цепи при переходном процессе
Для эл. цепи определить начальное значение величины i3(0),если U=120 B, R1=10 Oм, R2=20 Ом, L=0.2 Гн, C=100 мкФ.Рис 6.9 Заранее...

Ошибка при попытке разыменовать указатель, который размещен в динамической памяти другим процессом
Доброго времени суток. Есть родительский процесс, он запускает через createProcess дочерний процесс, передавая ему в командной строке...

1
0 / 0 / 1
Регистрация: 18.12.2012
Сообщений: 11
26.11.2015, 20:43  [ТС] 2
Дублирую код.

Vertex.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef VERTEX_H
#define VERTEX_H
 
template <typename T>
class Vertex
{
private:
    T value;
    int numInc;
public:
    T *incident;
    Vertex();
    Vertex(T a);
    ~Vertex();
    void push(T a);
    void pop(T a);
    int getInc();
    bool existEdge(T a);
    T getVal();
    T getIncVal(int i);
};
Graph.h
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
#include "Vertex.h"
#include "iostream"
 
#ifndef GRAPH_H
#define GRAPH_H
 
template <typename T>
class Graph
{
private:
    Vertex<T> *graph;
    int numVer;
    int numEdge;
    
    template <typename T>
    friend class GraphIterVer;
 
public:
    Graph();
    Graph(T a);
    ~Graph();
    void addVer(T a);
    void delVer(T a);
    void addEdge(T a, T b);
    void delEdge(T a, T b);
    bool existGrVer(T a);
    bool existGrEdge(T a, T b);
    int getVer();
    int getEdge();
    int getInc(T a);
    void print();
 
    GraphIterVer<T>* createIteratorVer() const;
};
 
 
 
 
 
template<typename T>
Graph<T>::Graph()
{
    graph = new Vertex<T>[100];
}
template<typename T>
Graph<T>::Graph(T a)
{
    graph = new Vertex<T>[100];
    addVer(a);
}
template<typename T>
Graph<T>::~Graph()
{
    delete graph;
}
 
template<typename T>
void Graph<T>::addVer(T a)
{
    bool flag = true;
    for (int i = 0; i < numVer; i++)
    {
        if (graph[i].getVal() == a)
        {
            flag = false;
        }
    }
    if (flag)
    {
        graph[numVer++] = Vertex<T>(a);
    }
}
template<typename T>
void Graph<T>::delVer(T a)
{
    bool flag = false;
    int num;
    for (int i = 0; i < numVer; i++)
    {
        if (graph[i].getVal() == a)
        {
            flag = true;
            num = i;
        }
    }
    if (flag)
    {
        for (int i = num; i < numVer; i++)
        {
            graph[i] = graph[i + 1];
        }
        numVer--;
        for (int i = num; i < numVer; i++)
        {
            delEdge(a, graph[i].getVal());
            delEdge(graph[i].getVal(), a);
        }
    }
}
 
template<typename T>
void Graph<T>::addEdge(T a, T b)
{
    if (existGrVer(a) && existGrVer(b))
    {
        numEdge++;
        for (int i = 0; i < numVer; i++)
        {
            if (graph[i].getVal() == a)
            {
                graph[i].push(b);
            }
            /*if (graph[i].getVal() == b)
            {
            graph[i].push(a);
            }*/
        }
    }
    else
    {
        std::cout << "\nError!\n";
    }
}
template<typename T>
void Graph<T>::delEdge(T a, T b)
{
    if (existGrVer(a) && existGrVer(b))
    {
        numEdge--;
        for (int i = 0; i < numVer; i++)
        {
            if (graph[i].getVal() == a)
            {
                graph[i].pop(b);
            }
            /*if (graph[i].getVal() == b)
            {
            graph[i].pop(a);
            }*/
        }
    }
    else
    {
        std::cout << "\nError!\n";
    }
}
 
template<typename T>
bool Graph<T>::existGrVer(T a)
{
    for (int i = 0; i < numVer; i++)
    {
        if (graph[i].getVal() == a)
        {
            return true;
        }
    }
    return false;
}
template<typename T>
bool Graph<T>::existGrEdge(T a, T b)
{
    for (int i = 0; i < numVer; i++)
    {
        if (graph[i]->getVal() == a)
        {
            return graph[i]->existEdge(b);
        }
    }
}
 
template<typename T>
void Graph<T>::print()
{
    Vertex<T> *buf;
    for (int i = 0; i < numVer; i++)
    {
        buf = &graph[i];
        int k = buf->getVal();
        std::cout << k << ": ";
        for (int j = 0; j < buf->getInc(); j++)
        {
            std::cout << buf->incident[j] << ";";
        }
        std::cout << endl;
    }
}
 
template<typename T>
int Graph<T>::getVer()
{
    return numVer;
}
template<typename T>
int Graph<T>::getEdge()
{
    return numEdge;
}
template<typename T>
int Graph<T>::getInc(T a)
{
    for (int i = 0; i < numVer; i++)
    {
        if (graph[i]->getVal() == a)
        {
            return graph[i]->getInc();
        }
    }
    std::cout << "\nError!\n";
}
template<typename T>
GraphIterVer<T>* Graph<T>::createIteratorVer() const
{
    return new GraphIterVer<T>(this);
}
template<typename T>
class GraphIterVer
{
    const Graph<T> *stk;
    int index;
public:
    GraphIterVer(const Graph<T> *s)
    {
        stk = s;
    }
    void first()
    {
        index = 0;
    }
    void last()
    {
        index = stk->numVer;
    }
    void next()
    {
        index++;
    }
    void prev()
    {
        index--;
    }
    bool isDone()
    {
        return index == stk->numVer;
    }
    bool isNull()
    {
        return index == 0;
    }
    T currentItem()
    {
        return (stk->graph[index]).getVal();
    }
};
 
 
#endif
main
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
#include <iostream>
#include "Graph.h"
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "rus");
    Graph<int> graph;
    graph.addVer(13);
    graph.addVer(14);
    graph.addVer(23);
    graph.addVer(14);
    graph.addVer(33);
    graph.addVer(1);
    graph.addEdge(23, 14);
    graph.addEdge(14, 23);
    graph.addEdge(13, 1);
    graph.addEdge(14, 13);
    graph.print();
    cout << "Количество вершин graph " << graph.getVer() << "\n";
    cout << "Количество ребёр graph " << graph.getEdge() << "\n";
    graph.delVer(23);
    graph.delEdge(2, 3);
    graph.print();
    cout << "Количество вершин graph = " << graph.getVer() << "\n";
    cout << "Количество ребёр graph = " << graph.getEdge() << "\n";
 
 
    GraphIterVer<int>* per1 = graph.createIteratorVer();
    for (per1->first(); !per1->isDone(); per1->next()) cout << per1->currentItem() << " ";
    cout << "\n";
 
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2015, 20:43
Помогаю со студенческими работами здесь

Как дописать в конец числа цифру при этом обнулив его начальное значение на с++?
Как дописать в конец числа цифру при этом обнулив его начальное значение на с++? Например было 0,152 стало 0,0005; 1,22=0,005

Передать значение из одного класса в другой через указатель
Я не могу додуматься что тут не так class Car { private: int weight; public: Car(int w) { weight=w; }

Почему не возвращается значение через указатель из метода класса?
Вот решил проверить поведение указателя в программе (я только учу C++), как оказалось после выхода из метода, указатель не указывает на...

Не работают точки breakpoint - The breakpoint will not currently be hit. No symbols have been loaded for this document
что за проблема , как ее решить на VB 2010 ? только начал в нем работать и одна проблема за другой !!!!

При попытке присвоить значение типа char одному из полей структуры, выводится некоректное значение
Задание Описать структуру с именем TRAIN, содержащую следующие поля: Название пункта назначения; Номер поезда; Время...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru