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

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

26.11.2015, 20:41. Показов 644. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2015, 20:41
Ответы с готовыми решениями:

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

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

Ошибка при попытке разыменовать указатель, который размещен в динамической памяти другим процессом
Доброго времени суток. Есть родительский процесс, он запускает через 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
26.11.2015, 20:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2015, 20:43
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru