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

Как достать указатель на объект из контейнера set - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Значение указателей (*ptr.) на пустые ячейки памяти http://www.cyberforum.ru/cpp-beginners/thread630426.html
Здравствуйте, уважаемые форумчане! С началом изучения С++ стало возникать множество вопросов. Когда резервируется свободная память некоторого типа, то значения указателей к этим ячейкам выглядят весьма интересно. Вот пример. #include "stdafx.h" #include <iostream> #include <limits.h>
C++ Указатель на массив указателей на объекты, передать в метод объекта Здравствуйте! Нужно решить задачу, есть такой класс. class MyClsDisk { public: void SetDiskOnPurpose(MyClsDisk *p,int ix, MyClsDisk **a) { cout<<(*p).Weight<<endl; http://www.cyberforum.ru/cpp-beginners/thread630423.html
C++ Адресное пространство
Адрес в сипп является 4байтным числом. Возможно ли модифицировать адрес так, что бы залезть в другие процессы? Или для каждого процесса выделяется "локальное" адресное пространство?
Интерфейс в VS2010 C++
:facepalm:При программировании хочу видеть описание типов, помниться мне что была какая та такая форма интересная например выбераешь мышкой структуру WNDCLASS например и в форме в низу ее свойства типы данных и т.п. сейчас найти не могу. Дальше один раз случай был в студии, зажимаешь пару или кнопку не помню тоже и появлялось описание около мышки (тип данных, кол-во параметров) очень удобно...
C++ Передача параметров для cuda http://www.cyberforum.ru/cpp-beginners/thread630400.html
Всем доброго времени суток, столкнулся с такой проблемой, мне нужно передать значения полученные в результате вычисления из одной функции в другую. Проблема в том, что нужно мне это провернуть используя cuda. В коде оставил только основное, постарался упростить короче. Вот есть там в коде в main - x и y вот они у меня высчитываются в другом файле и соответственно их нужно каким-то образом...
C++ Как исправлять ошибку? я из книжки выписал первую программу #include <iostream> int main() { cout << "Hello World!\n"; return 0; } компилятор сказал что надо из iostream.h убрать .h что я и сделал но программа все равно не работает как мне это исправить? подробнее

Показать сообщение отдельно
sysop999
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 64
29.07.2012, 22:46     Как достать указатель на объект из контейнера set
Имеется вот такой код
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
#include "stdafx.h"
#include <string>
#include <iostream>
#include <fstream>
#include <set>
#include <conio.h>
using namespace std;
 
class Body;
 
class Folder
{
public :
    Folder () 
    {
        p_data = &data;
        cout << "Folder START" << endl;
    }
 
    void put_pointer (Body *f_pointer)
    {
        data.insert(f_pointer);
    }
    int get_size ()
    {
        return data.size();
    }
    void get_data ()
    {
        set <Body*>::iterator set_it = data.begin();
        (*set_it)->get_status();
    }
private:
    set <Body*> data;
    set <Body*> *p_data;
}; 
 
class Body
{
public :
    Body (string unit_string, Folder *folder) : all_data(unit_string)  
    {
        string::size_type pos_b;
        string::size_type pos_l;
        string::size_type pos_m;
        pos_l = all_data.size();
        s_valid = true;
 
        if ((all_data.find("<unit>") == 0) && (all_data.find("</unit>") == pos_l-7)) // unit block
            s_unit = true;
        else
        {
            s_unit = false;
            s_valid = false;
        }
 
        pos_b = all_data.find("<first_name>"); // first_name block
        pos_m = all_data.find_first_of(">",pos_b) + 1;
        pos_l = all_data.find("</first_name>");
        if (pos_b < pos_l)
            s_first_name = true;
        else
        {
            s_first_name = false;
            s_valid = false;
        }
        first_name = all_data.substr(pos_m,pos_l-pos_m);
 
                
        pos_b = all_data.find("<last_name>"); // last_name block
        pos_m = all_data.find_first_of(">",pos_b) + 1;
        pos_l = all_data.find("</last_name>");
        if (pos_b < pos_l)
            s_last_name = true;
        else
        {
            s_last_name = false;
            s_valid = false;
        }
        last_name = all_data.substr(pos_m,pos_l-pos_m);
 
        pos_b = all_data.find("<place_of_residence>"); // place_of_residence block
        pos_l = all_data.find("</place_of_residence>");
        if (pos_b < pos_l)
            s_place_of_residence = true;
        else
        {
            s_place_of_residence = false;
            s_valid = false;
        }
 
        pos_b = all_data.find("<city>"); // place_of_residence block -> city block
        pos_m = all_data.find_first_of(">",pos_b) + 1;
        pos_l = all_data.find("</city>");
        if (pos_b < pos_l)
            s_city = true;
        else
        {
            s_city = false;
            s_valid = false;
        }
        city = all_data.substr(pos_m,pos_l-pos_m);
 
        pos_b = all_data.find("<street_address>"); //  place_of_residence block -> street_address block
        pos_m = all_data.find_first_of(">",pos_b) + 1;
        pos_l = all_data.find("</street_address>");
        if (pos_b < pos_l)
            s_street_address = true;
        else
        {
            s_street_address = false;
            s_valid = false;
        }
        street_address = all_data.substr(pos_m,pos_l-pos_m);
 
        f_pointer = folder;
        put_pointer();
 
    }
    void put_pointer ()
    {
        f_pointer->put_pointer(this);
    }
    void get_status ()
    {
        cout << endl << "Object status" << endl
             << s_unit << s_first_name << s_last_name
             << s_place_of_residence << s_city << s_street_address
             << s_valid << endl;
        cout << "Unit data " << endl
             << "First name = " << first_name
             << " Last name= " << last_name
             << " City = " << city
             << " Street address = " << street_address << endl;
    }
 
private:
    // structure data
    bool s_unit;
    bool s_first_name;
    bool s_last_name;
    bool s_place_of_residence;
    bool s_city;
    bool s_street_address;
    // personal data
    string first_name;
    string last_name;
    string city;
    string street_address;
    string all_data;
    // valid unit
    bool s_valid;
    Folder *f_pointer;
}; 
 
 
int main()
{
    cout << "Please enter a file name" << endl;
    string file_name;
    cin >> file_name;
 
    ifstream infile;          // assign data file
    infile.open(file_name);
    if (!infile)              // check file
    {
        cout << "File not found" << endl;
        return -1;
    }
    string word;
    string sentences;
    while (!infile.eof())     // load file in string
    {
        infile >> word;
        sentences += word;
    }
    cout << sentences;
    cout << endl;
 
 
    
    string sentence;
    string::size_type pos_l;
    Body *m_body;
    Folder *m_folder = new Folder ();
 
    while (!sentences.empty())
    { 
        pos_l = sentences.find("</unit>");
        if (pos_l == string::npos)
        {
            sentences.clear();
            cout << "File is empty" << endl;
        }
        else
        {
        sentence = sentences.substr(0,pos_l+7);
        sentences.erase(0,pos_l+7);
        m_body = new Body (sentence,m_folder);
        }
    } 
    cout << endl; 
    cout << m_folder->get_size() ; 
    cout << endl;
    cout << sentence << endl;
 
    getch();
    return 0;
}
Вопрос в том, как с этого контейнера-интератора достать указатель на класс и вызвать функцию get_satus()
Класс Body я объявил выше, но определил ниже класса Folder
Вот в этом месте :
C++
1
2
3
4
5
6
7
8
9
    void get_data ()
    {
        set <Body*>::iterator set_it = data.begin();
        (*set_it)->get_status(); // КАК ЗДЕСЬ СДЕЛАТЬ ???????????????
    }
private:
    set <Body*> data;
    set <Body*> *p_data;
};
Пишет ошибка :
c:\users\dudi\documents\visual studio 2010\projects\p_r_d\p_r_d\p_r_d.cpp(31): error C2027: use of undefined type 'Body'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru