Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Easykatka1
0 / 0 / 0
Регистрация: 07.01.2019
Сообщений: 4
1

Передача вектора структур из класса в другой класс

07.03.2019, 21:16. Просмотров 262. Ответов 4

Здравствуйте форумчане, собсно есть два класса в первом создаётся и заполняется вектор структур(Prtotected),во втором(:Protected class1) должно происходить его изменение,но при передаче его он почему то пуст.Вопрос почему?Заодно посоветуйте что-нибудь доходчивое про смысл классов в ооп.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2019, 21:16
Ответы с готовыми решениями:

Передача вектора из класса в класс?
Доброго времени суток! У меня возникла проблема в очень простой программе. Я передаю функции из...

Передача вектора структур в функцию
Как передать значение вектора структур в функцию visual? #include "stdafx.h" #include <conio.h>...

Класс итератора для класса вектора
Необходимо реализовать собственный класс итератора для прохода по вектору, с перегрузкой оператора...

Написать функцию для класса, возращающую данный из вектора обьектов класса по итератору вектора
День=добрый как написать функцию для класса возращающую данный из вектора обьектов класса по...

Передача параметров в другой класс
:-|Hallo =) У меня простой вопрос который ставит меня в тупик. У меня есть класс...

4
Folian
163 / 106 / 47
Регистрация: 25.01.2019
Сообщений: 270
07.03.2019, 21:45 2
Какую из этих книг порекомендуете?

Кликните здесь для просмотра всего текста
Где код?
3
Миниатюры
Передача вектора структур из класса в другой класс   Передача вектора структур из класса в другой класс  
Easykatka1
0 / 0 / 0
Регистрация: 07.01.2019
Сообщений: 4
08.03.2019, 10:30  [ТС] 3
Folian, sry
Кликните здесь для просмотра всего текста

Read_FromFile заполняет вектор структур.
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
class Read_FromFile
{
 
protected:
 
    struct Values
    {
        string vnum;
        string name;
        string locale_name;
        string type;
        string subtype;
        string weight;
        string size;
        string antiflag;
        string flag;
        string wearflag;
        string immuneflag;
        string gold;
        string shop_buy_price;
        string refined_vnum;
        string refine_set;
        string magic_pct;
        string limittype0;
        string limitvalue0;
        string limittype1;
        string limitvalue1;
        string applytype0;
        string applyvalue0;
        string applytype1;
        string  applyvalue1;
        string  applytype2;
        string  applyvalue2;
        string  value0;
        string  value1;
        string  value2;
        string  value3;
        string  value4;
        string  value5;
        string  socket0;
        string  socket1;
        string  socket2;
        string  socket3;
        string  socket4;
        string  socket5;
        string  specular;
        string  socket_pct;
        string  addon_type;
        string  vnum_range;
    };
    vector <Values> Tables;
    
 
private:
 
    vector <string> temp;
    string filepath = "E:\\felige\\protowork\\SqlToTxt\\item_proto.sql";
public:
    //vector <Values> Tables;
    void SetNameFile()
    {
        cout << "Введите путь к файлу используйте по две кавычки!\b\n";
        cin >> filepath;
    }
    string GetNameFile()
    {
        return filepath;
 
    }
    void DumpFile()
    {
        fstream file(filepath);
        string buff;
        while (!file.eof())
        {
            getline(file, buff, '\n');
            temp.push_back(buff);
        }
 
        for (size_t i = 0; i < temp.size(); i++)
        {
            //cout << temp[i] << endl;
        }
 
        file.close(); // закрываем файл
    }
    const char pattern[749] = "INSERT INTO item_proto VALUES [(]" "[']" "(\\d+)" "[']" "[,]\\s+" "([\\w]+)" "[,]\\s+" "([\\w]+)" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+"  "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+""[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\-\\d+)" "[']" "[,]\\s+" "[']" "(\\-\\d+)" "[']" "[,]\\s+" "[']" "(\\-\\d+)" "[']" "[,]\\s+" "[']" "(\\-\\d+)" "[']" "[,]\\s+" "[']" "(\\-\\d+)" "[']" "[,]\\s+" "[']" "(\\-\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[,]\\s+" "[']" "(\\d+)" "[']" "[)]" "[\\D]*";
    //const char pattern[706] = "INSERT INTO item_proto VALUES [(]" "[']" "(\\d)" "[']" "[,]\\s+" "([\\w]+)" "[,]\\s+" "([\\w]+)" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+"  "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[)].";
    void Regular_pars()
    {
        Values buff;
        cmatch match;
        regex regular(pattern);
        
        for (size_t i = 0; i < temp.size(); i++)
        {
            if (regex_search(temp[i].c_str(), match, regular))
            {
                buff.vnum = match[1];
                buff.name = match[2];
                buff.locale_name = match[3];
                buff.type= match[4];
                buff.subtype = match[5];
                buff.weight = match[6];
                buff.size = match[7];
                buff.antiflag = match[8];
                buff.flag = match[9];
                buff.wearflag = match[10];
                buff.immuneflag = match[11];
                buff.gold = match[12];
                buff.shop_buy_price = match[13];
                buff.refined_vnum = match[14];
                buff.refine_set = match[15];
                buff.magic_pct = match[16];
                buff.limittype0 = match[17];
                buff.limitvalue0 = match[18];
                buff.limittype1 = match[19];
                buff.limitvalue1 = match[20];
                buff.applytype0 = match[21];
                buff.applyvalue0 = match[22];
                buff.applytype1 = match[23];
                buff.applyvalue1 = match[24];
                buff.applytype2 = match[25];
                buff.applyvalue2 = match[26];
                buff.value0 = match[27];
                buff.value1 = match[28];
                buff.value2 = match[29];
                buff.value3 = match[30];
                buff.value4 = match[31];
                buff.value5 = match[32];
                buff.socket0 = match[33];
                buff.socket1 = match[34];
                buff.socket2 = match[35];
                buff.socket3 = match[36];
                buff.socket4 = match[37];
                buff.socket5 = match[38];
                buff.specular = match[39];
                buff.socket_pct = match[40];
                buff.addon_type = match[41];
                buff.vnum_range = match[42];
                Tables.push_back(buff);
                //kekl++;
            }
            
 
        }
    }
 
};
класс второй,должен обрабатывать вектор Tables
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
class HexTranslator:protected Read_FromFile
{
 
private:
    string HexToString(string hex,string translated)
    {
 
        //hex = "0x4272656974736368776572742B38";
        int len = hex.length();
        string newString;
        for (int i = 0; i < len; i += 2)
        {
            string byte = hex.substr(i, 2);
            char chr = (char)(int)strtol(byte.c_str(), NULL, 16);
            newString.push_back(chr);
        }
        return newString;
    }
    string StringToHex(string name)
    {
        int len = name.length();
        string newStr;
        
        vector<char> bindata(name.c_str(), name.c_str() + name.size() );
        ostringstream oss;
        for (auto e : bindata) oss << std::hex << (e & 0xFF);
        string hexdata = oss.str();
        hexdata = "0x" + hexdata;
        cout << hexdata << std::endl;
 
        return hexdata;
    }
    struct dats
    {
        vector<string> game;
        vector<string> lang;
 
    };
    string findfile(string filename)
    {
        string temp = "\\";
        string path;
        char* buffer = new char[MAX_PATH];
        GetCurrentDirectoryA(MAX_PATH, buffer);
        path = buffer + temp + filename;
        return path;
    }
    void ReadFileClient(dats *stroki, string name)
    {
        fstream file(name);
        if (!file)
        {
            cout << "Файл " << name << " не открыт\n\n";
 
        }
        else
        {
        }
        string buff;
        bool read = true;
        while (!file.eof())
        {
 
            if (read)
            {
                getline(file, buff, '\t');
                stroki->game.push_back(buff);
                read = false;
 
            }
            else
            {
                getline(file, buff, '\n');
                stroki->lang.push_back(buff);
                read = true;
            }
 
 
        }
 
        file.close(); 
    }//Работает верно
    void Hex_to_locale(dats *stroki)
    {
        for (unsigned int i = 0; i < Read_FromFile::Tables.size(); i++)
        {
            Values buffer;
            string sbuffer;
            Tables[i] = buffer;
            sbuffer=buffer.vnum;
            for (unsigned int j = 0; j < stroki->game.size(); i++)
            {
                if (buffer.vnum==stroki->game[j])
                {
                    buffer.locale_name = StringToHex(stroki->lang[j]);
                    Tables[i] = buffer;
                    break;
                }
            }
        }
    }
    public:
 
        void start()
        {
            string namefile1, resultfile;
            dats *stroki = new dats;
            dats *strokitr = new dats;
            dats *untr = new dats;
            cout << "Введите имя файла донора,учитывая разширение(.txt)и регистр(ABC не равно abc) \n";
            cin >> namefile1;
            namefile1 = findfile(namefile1);
            ReadFileClient(strokitr, namefile1);
            Hex_to_locale(strokitr);
            //StringToHex(strokitr);
 
            cout << "Результат готов в файле result.txt\n";
        }
};
Вызываю в мэине
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
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "HexToString(Tables->name)"<< endl;/*some string|\*/
    int z;
    char pattern[] = "INSERT INTO item_proto VALUES [(]" "[']" "(\\d)" "[']" "[,]\\s+" "([\\w]+)" "[,]\\s+" "([\\w]+)" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+"  "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+""[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\-\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[,]\\s+" "[']" "(\\d)" "[']" "[)].";
    cout << "Ввести путь к файлу(1) или использовать готовый (2) ? \b\n";
    cin >> z;
    Read_FromFile *reading = new Read_FromFile();
    //Read_FromFile reading;
    HexTranslator * heex = new HexTranslator();
    //HexTranslator heex;
    switch (z)
    {
        case 1: 
            reading->SetNameFile();
            reading->DumpFile();
            reading->Regular_pars();
            heex->start();
        case 2:
            cout << reading->GetNameFile() << endl;
            reading->DumpFile();
            reading->Regular_pars();
            heex->start();
 
    default:
        break;
    }
    
 
 
    system("pause");
    return 0;
}
пример строки для первого класса


пример строки для первого класса
Кликните здесь для просмотра всего текста
INSERT INTO item_proto VALUES ('10', 0xB5B52B30, 0x536368776572742B30, '1', '0', '0', '2', '32', '1', '16', '', '0', '1', '11', '1', '15', '1', '0', '0', '0', '7', '22', '0', '0', '0', '0', '0', '15', '19', '13', '15', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '1', '0', '0');
0
Folian
163 / 106 / 47
Регистрация: 25.01.2019
Сообщений: 270
08.03.2019, 11:32 4
Цитата Сообщение от Easykatka1 Посмотреть сообщение
C++
1
2
3
4
5
case 1: 
* * * * * * reading->SetNameFile();
* * * * * * reading->DumpFile();
* * * * * * reading->Regular_pars();
* * * * * * heex->start(); /*ты вот тут смотришь?*/
Конечно там пусто. У тебя reading и heex два разных объекта, заполняешь один - смотришь в другой.

Вот, для наглядности:

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
class A
{
protected:
    int x;
    void init()
    {
        x = 78;
    }
};
 
class B :  protected A
{
public:
    B(){ init(); }
    void get()
    {
        std::cout << x;
    }
 
};
 
int main()
{
    B b;
    b.get();
1
Easykatka1
0 / 0 / 0
Регистрация: 07.01.2019
Сообщений: 4
11.03.2019, 19:00  [ТС] 5
Подсказанное решение,не помогло в связи со скудностью моего ума.Решил добавлением returna.
0
11.03.2019, 19:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2019, 19:00

Передача переменной из одного класса в другой
Здравствуйте, пишу лабораторную и что-то чувствую, что прогер из меня неважный, весь интернет...

Передача массива одного класса в другой С++
Доброго времени суток. Столкнулся с проблемой, есть класс который заполняет массив, этот массив...

Передача информации из класса в класс
Хочу написать программу разделённую на классы, может кто подсказать как сделать чтобы классы имели...


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

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

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