Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
2 / 2 / 2
Регистрация: 17.03.2015
Сообщений: 147

Вынести некоторые функции в модуль

24.05.2015, 12:13. Показов 4832. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, суть такая:
Есть программа с кучей функций в которых используется собственная структура. Хочу для удобства вынести некоторые функции в модуль, но при этом чтобы объявленные структуры могли использоваться и в модуле и в основном файле. Если просто вынести в cpp и объявить их в h, затем подключить h, структуры получаются видны только в основном файле.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2015, 12:13
Ответы с готовыми решениями:

Вынести код создания списка в отдельный модуль
#include <iostream> #include <conio.h> using namespace std; struct A { int key; }; class List { public:

Нужно вынести часть программы в отдельный модуль
Помогите вынести 19-36 строки в отдельный модуль, чтобы можно было потом как заголовочный файл .h его подключить #define...

Раздельная компиляция: вынести вектор в отдельный модуль
Всем привет! Лазил я в гугле и наткнулся на тему по раздельной компиляции. Там был пример, в отдельный модуль, выносились глобальные...

15
 Аватар для Solitaire Raven
36 / 36 / 47
Регистрация: 20.04.2015
Сообщений: 198
24.05.2015, 12:20
Цитата Сообщение от UltimateDoker Посмотреть сообщение
Хочу для удобства вынести некоторые функции в модуль, но при этом чтобы объявленные структуры могли использоваться и в модуле и в основном файле
Выносите в другой модуль(example.cpp) и подключаете к основному модулю
C++
1
2
3
4
5
6
7
8
example.cpp
#include "m1.h" //ваш файл
...
 
 
main.cpp
 
#include "example.cpp"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
24.05.2015, 12:22
Цитата Сообщение от Solitaire Raven Посмотреть сообщение
#include "example.cpp"
За такое надо сразу отрывать все конечности.

Цитата Сообщение от UltimateDoker Посмотреть сообщение
Если просто вынести в cpp и объявить их в h, затем подключить h, структуры получаются видны только в основном файле
Если подключить h к cpp-файлу модуля, то все точно так же будет видно в модуле.
0
 Аватар для Solitaire Raven
36 / 36 / 47
Регистрация: 20.04.2015
Сообщений: 198
24.05.2015, 12:31
Цитата Сообщение от volvo Посмотреть сообщение
За такое надо сразу отрывать все конечности.

Почему?

Добавлено через 7 минут
А я не до понял оказывается ...Извиняюсь

Цитата Сообщение от UltimateDoker Посмотреть сообщение
Хочу для удобства вынести некоторые функции в модуль, но при этом чтобы объявленные структуры могли использоваться и в модуле и в основном файле.
Можно вынести структуры в m1.h(for example), а функции оставить в модуле, и потом подключать этот файл
в модуле
Получится вроде этого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
m1.h
 
struct Smth
{
.
.
.
}
 
 
main.cpp
#include "m1.h"
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.05.2015, 12:34
Цитата Сообщение от Solitaire Raven Посмотреть сообщение
Почему?
Потому что теряется весь смысл разделения на модули. И в случае такой конструкции в нескольких файлах получишь ошибку множественного определения (см. ODR)
1
 Аватар для Solitaire Raven
36 / 36 / 47
Регистрация: 20.04.2015
Сообщений: 198
24.05.2015, 12:37
Цитата Сообщение от Tulosba Посмотреть сообщение
И в случае такой конструкции в нескольких файлах получишь ошибку множественного определени
Если честно еще не получал программа нормально работала...
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.05.2015, 12:42
Цитата Сообщение от Solitaire Raven Посмотреть сообщение
Если честно еще не получал программа нормально работала...
Создай проект из двух *.cpp файлов. Потом сделай в одном из них подключение другого (по твоей методике). Главное чтобы в нем была хотя бы одна функция реализована. Получишь соответствующую ошибку.
0
2 / 2 / 2
Регистрация: 17.03.2015
Сообщений: 147
24.05.2015, 12:44  [ТС]
Вынес функции из main() в Unit.cpp, а их объявления провел в Unit.h, так же вынес структуры в Str.h и подключил Str.h в unit.h. В итоге при компиляции возникает море ошибок в духе:
error C2146: syntax error : missing ';' before identifier 'f2'
'<<' : illegal, right operand has type 'const char [9]'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
mismatch in formal parameter list
Что я сделал не правильно?
0
 Аватар для Solitaire Raven
36 / 36 / 47
Регистрация: 20.04.2015
Сообщений: 198
24.05.2015, 12:52
UltimateDoker,

Выложите ваш код полностью...

Добавлено через 4 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Создай проект из двух *.cpp файлов. Потом сделай в одном из них подключение другого (по твоей методике). Главное чтобы в нем была хотя бы одна функция реализована. Получишь соответствующую ошибку.
Делал лабу таким методом,честное слово никаких ошибок не выводило...
Делал функции в main2.cpp и подключал сразу же файл со структурой(m1.h) и файл с функциями(Read etc.)
, и все это добро подключал к main.cpp...
Срабатывало...
0
2 / 2 / 2
Регистрация: 17.03.2015
Сообщений: 147
24.05.2015, 12:59  [ТС]
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
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <cctype>
#include <string>
#include <cstdlib>
using namespace std;
ofstream f2;
struct TData{
    int day;
    int month;
    int year;
};
struct Man{
    char Name[100];
    char Fam[100];
    char Otch[100];
    TData Birth;
    TData Death;
    char Sex[5];
};
struct TDer{
    Man man;
    TDer *left, *right, *up;
};
void put(TDer* &Tree, Man man);
void TekRoot(TDer* &Elem);
void TekLeft(TDer* &Elem);
void TekRight(TDer* &Elem);
void TekUp(TDer* &Elem);
void PrintTekFile(TDer* &Elem);
void PrintTreeOneFile(TDer* &Elem);
void LogFile(TDer* &Elem, string s, int s1);
void CorrectTek(TDer* &Elem, Man correct);
bool Check(TDer* &Tree, Man man);
void CreateEmptyTree(TDer* &Elem, Man correct);
void PrintTek(TDer* &Elem);
void PrintTreeOne(TDer* &Elem);
void PrintTree(TDer* &Elem);
void FreeTree(TDer* &Elem);
void CreateLeft(TDer* &Elem, Man correct);
void CreateRight(TDer* &Elem, Man correct);
Man ReadFromText(ifstream &f1);
void CreateTreeSort(TDer* &Tree);
void CreateTreeEnter(TDer* &Tree);
 
void TekRoot(TDer* &Elem){
    if (Elem != NULL){
        while (Elem->up != NULL){
            Elem = Elem->up;
        }
    }
}
void TekLeft(TDer* &Elem){
    if (Elem != NULL){
        Elem = Elem->left;
    }
}
void TekRight(TDer* &Elem){
    if (Elem != NULL){
        Elem = Elem->right;
    }
}
void TekUp(TDer* &Elem){
    if (Elem != NULL){
        Elem = Elem->up;
    }
}
void PrintTekFile(TDer* &Elem){
    f2 << "Ф.И.О.: " << Elem->man.Name << " " << Elem->man.Fam << " " << Elem->man.Otch << endl;
    f2 << "Дата рождения: " << Elem->man.Birth.day << "." << Elem->man.Birth.month << "." << Elem->man.Birth.year << endl;
    if (Elem->man.Death.day == -1){
        f2 << "На данный момент - жив" << endl;
    }
    else {
        f2 << "Дата смерти: " << Elem->man.Death.day << "." << Elem->man.Death.month << "." << Elem->man.Death.year << endl;
    }
}
void PrintTreeOneFile(TDer* &Elem){
    if (Elem != NULL){
        PrintTreeOneFile(Elem->left);
        PrintTreeOneFile(Elem->right);
        PrintTekFile(Elem);
    }
}
void LogFile(TDer* &Elem, string s, int s1){
    if (Elem != NULL){
        TDer *Temp = Elem;
        TDer *Tek = Elem;
        TekRoot(Temp);
        f2 << "---------------------------------------------------------------------\n";
        f2 << "Функция: " << s << "() (" << __FILE__ << ":" << s1 << ")\n";
        f2 << "Текущее дерево :\n";
        PrintTreeOneFile(Temp);
        f2 << "---------------------------------------------------------------------\n";
        Elem = Tek;
    }
    else {
        f2 << "---------------------------------------------------------------------\n";
        f2 << "Функция: " << s << "() (" << __FILE__ << ":" << s1 << endl;
        f2 << "Дерево пусто\n";
        f2 << "---------------------------------------------------------------------\n";
    }
}
void CorrectTek(TDer* &Elem, Man correct){
    Elem->man = correct;
}
bool Check(TDer* &Tree, Man man){
    if ((_stricmp(Tree->man.Name, man.Name) != 0) && (_stricmp(Tree->man.Name, man.Name) > 0)){
        return true;
    }
    else if (_stricmp(Tree->man.Name, man.Name) < 0) return false;
    if ((_stricmp(Tree->man.Fam, man.Fam) != 0) && (_stricmp(Tree->man.Fam, man.Fam) > 0)){
        return true;
    }
    else if (_stricmp(Tree->man.Fam, man.Fam) < 0) return false;
    if ((_stricmp(Tree->man.Otch, man.Otch) != 0) && (_stricmp(Tree->man.Otch, man.Otch) > 0)){
        return true;
    }
    else if (_stricmp(Tree->man.Otch, man.Otch) < 0) return false;
}
void CreateEmptyTree(TDer* &Elem, Man correct){
    string s = __FUNCTION__;
    int s1 = __LINE__ + 1;
    if (NULL == Elem){
        s1 = __LINE__+1;
        LogFile(Elem,s, s1);
        Elem = new TDer; //Выделяем память под звено дерева
        Elem->man = correct;
        Elem->left = Elem->right = Elem->up = NULL;
        s1 = __LINE__+1;
        LogFile(Elem, s, s1);
    }
}
void PrintTek(TDer* &Elem){
    cout << "Ф.И.О.: " << Elem->man.Name << " " << Elem->man.Fam << " " << Elem->man.Otch << endl;
    cout << "Дата рождения: " << Elem->man.Birth.day << "." << Elem->man.Birth.month << "." << Elem->man.Birth.year << endl;
    if (Elem->man.Death.day == -1){
        cout << "На данный момент - жив" << endl;
    }
    else {
        cout << "Дата смерти: " << Elem->man.Death.day << "." << Elem->man.Death.month << "." << Elem->man.Death.year << endl;
    }
}
void PrintTreeOne(TDer* &Elem){
    string s = __FUNCTION__;
    int s1 = __LINE__ + 1;
    if (Elem != NULL){
        PrintTreeOne(Elem->left);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        PrintTek(Elem);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        PrintTreeOne(Elem->right);
    }
}
void PrintTree(TDer* &Elem){
    string s = __FUNCTION__;
    int s1 = __LINE__;
    char ch;
    cout << "Выберите способ вывода:\nV - Корень – Левое поддерево – Правое поддерево\nY - Левое поддерево – Правое поддерево – Корень\nR - Левое поддерево – Корень – Правое поддерево (Алфавитный порядок)" << endl << "Ваш выбор?  " << endl;
    cin >> ch;
    do {
    switch (toupper((unsigned char)ch))
    {
        //--------------------------------------------------------------------------------------
    case 'V':{
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        PrintTek(Elem);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        TekLeft(Elem);
        PrintTreeOne(Elem);
        TekUp(Elem);
        TekRight(Elem);
        PrintTreeOne(Elem);
        TekRoot(Elem);
        system("pause");
        system("cls");
        return;
    }
             //--------------------------------------------------------------------------------------
    case 'Y':{
        TekLeft(Elem);
        PrintTreeOne(Elem);
        TekUp(Elem);
        TekRight(Elem);
        PrintTreeOne(Elem);
        TekRoot(Elem);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        PrintTek(Elem);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        system("pause");
        system("cls");
        return;
    }
             //--------------------------------------------------------------------------------------
    case 'R':{
        TekLeft(Elem);
        PrintTreeOne(Elem);
        TekUp(Elem);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        PrintTek(Elem);
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        TekRight(Elem);
        PrintTreeOne(Elem);
        TekRoot(Elem);
        system("pause");
        system("cls");
        return;
    }
             //--------------------------------------------------------------------------------------
    default: {
             cout << "Такого способа нет\n";
             system("pause");
             system("cls");
             return;
    }
}
    } while (true);
}
void FreeTree(TDer* &Elem){
    if (Elem != NULL){
        FreeTree(Elem->left);
        FreeTree(Elem->right);
        delete Elem;
    }
}
void CreateLeft(TDer* &Elem, Man correct){
    string s = __FUNCTION__;
    int s1 = __LINE__ + 1;
    if (Elem->left == NULL){
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        Elem->left = new TDer;
        Elem->left->left = Elem->left->right = NULL;
        Elem->left->up = Elem;
        Elem->left->man = correct;
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
    }
    else {
        Elem = Elem->left;
        put(Elem, correct);
    }
}
void CreateRight(TDer* &Elem, Man correct){
    string s = __FUNCTION__;
    int s1 = __LINE__ + 1;
    if (Elem->right == NULL){
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
        Elem->right = new TDer;
        Elem->right->left = Elem->right->right = NULL;
        Elem->right->up = Elem;
        Elem->right->man = correct;
        s1 = __LINE__ + 1;
        LogFile(Elem, s, s1);
    }
    else {
        Elem = Elem->right;
        put(Elem, correct);
    }
}
void put(TDer* &Tree, Man man){
    if (man.Birth.day != NULL){
        if (NULL == Tree)
        {
            CreateEmptyTree(Tree,man);
        }
        else {
 
            if (Check(Tree, man) == true)
            {
                CreateLeft(Tree, man);
            }
            else CreateRight(Tree, man);
        }
    }
}
Man ReadFromText(ifstream &f1){
    Man man;
    f1 >> man.Name;
    if (strncmp(man.Name, "**", 2) != 0) {
        f1 >> man.Fam;
        f1 >> man.Otch;
        f1 >> man.Sex;
        f1 >> man.Birth.day >> man.Birth.month >> man.Birth.year;
        f1 >> man.Death.day >> man.Death.month >> man.Death.year;
    }
    else {
        strcpy_s(man.Fam, "**");
        strcpy_s(man.Otch, "**");
        strcpy_s(man.Sex, "**");
        man.Birth.day = man.Birth.month = man.Birth.year = NULL;
        man.Death.day = man.Death.month = man.Death.year = NULL;
    }
    return man;
}
void CreateTreeSort(TDer* &Tree){
    ifstream f1;
    char path[256];
    Man man;
    cout << "Введите имя файла для считывания: " << endl;
    cin >> path;
    f1.open(path);
    if (!f1.is_open()) {// если файл не открыт
        cout << "Файл не может быть открыт!\n"; // сообщить об этом
    }
    else{
        man = { "1", "1", "1", TData{ 1, 1, 1 }, TData{ 1, 1, 1 }, "1" };
        while (man.Birth.day != NULL){
            man = ReadFromText(f1);
            TekRoot(Tree);
            put(Tree, man);
        }
    }
    f1.close();
}
void CreateTreeEnter(TDer* &Tree){
    Man man;
    cout << "Введите имя: \n";
    cin >> man.Name;
    cout << "Введите фамилию: \n";
    cin >> man.Fam;
    cout << "Введите отчество: \n";
    cin >> man.Otch;
    cout << "Введите пол: \n";
    cin >> man.Sex;
    cout << "Введите дату рождения: \n";
    cin >> man.Birth.day >> man.Birth.month >> man.Birth.year;
    cout << "Введите дату смерти: \n";
    cin >> man.Death.day >> man.Death.month >> man.Death.year;
    TekRoot(Tree);
    put(Tree, man);
    TekRoot(Tree);
}
int main() {
    setlocale(LC_ALL, "Russian"); //Тут
    SetConsoleCP(1251);             // ставится
    SetConsoleOutputCP(1251);       // русский язык
    TDer *SortTree = NULL;
    TDer *GenTree = NULL;
    f2.open("b.log");
    char ch;
    string s = "FreeTree";
    int s1 = __LINE__ + 1;
    do {
        cout << "V - Вывод сортированного дерева;\nB - Вывод генеалогического дерева;\nT - Создание из текстового файла сортированного дерева;" << endl << "Y - Добавить с клавиатуры в упорядоченное дерево;\nE - Выход, C - Очистка деревьев;" << endl << "Ваш выбор?  " << endl;
        cin >> ch;
        switch (toupper((unsigned char)ch)) //Делает одно из следущих действий, зависимо от введенного с клавиатуры
        {
            //--------------------------------------------------------------------------------------
        case 'V':
            if (SortTree != NULL) {
                PrintTree(SortTree);
            }
            else {
                cout << "Дерево пусто" << endl;
                system("pause");
                system("cls");
            }
            break;
            //--------------------------------------------------------------------------------------
        case 'B':
            system("pause");
            system("cls");
            break;
            //--------------------------------------------------------------------------------------
        case 'Y':
            CreateTreeEnter(SortTree);
            system("pause");
            system("cls");
            break;
            //--------------------------------------------------------------------------------------
        case 'T':
            CreateTreeSort(SortTree);
            system("pause");
            system("cls");
            break;
            //--------------------------------------------------------------------------------------
        case 'C':
            s1 = __LINE__ + 1;
            LogFile(SortTree,s,s1);
            s1 = __LINE__ + 1;
            LogFile(GenTree,s,s1);
            FreeTree(SortTree);
            FreeTree(GenTree);
            SortTree = NULL;
            GenTree = NULL;
            s1 = __LINE__ + 1;
            LogFile(SortTree,s,s1);
            s1 = __LINE__ + 1;
            LogFile(GenTree,s,s1);
            system("pause");
            system("cls");
            break;
            //--------------------------------------------------------------------------------------
        case 'R':
            system("pause");
            system("cls");
            break;
            //--------------------------------------------------------------------------------------
        case 'E':
            FreeTree(SortTree);
            FreeTree(GenTree);
            f2.close();
            return 0;
            break;
            //--------------------------------------------------------------------------------------
        default: // если не введено ни одно из вышеперечисленных значений
            system("pause");
            system("cls");
            break;
        }
    } while (true);
}
Добавлено через 1 минуту
Мне необходимо вынести функции в модуль, без изменения работоспособности
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.05.2015, 13:03
Цитата Сообщение от Solitaire Raven Посмотреть сообщение
,честное слово никаких ошибок не выводило...
Значит что-то делал другое. Прикладываю проект для студии, чтоб ты мог лично проверить и убедиться в наличии ошибок.
Вложения
Тип файла: zip ODRfail.zip (1.9 Кб, 3 просмотров)
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.05.2015, 13:08
Цитата Сообщение от UltimateDoker Посмотреть сообщение
Мне необходимо вынести функции в модуль, без изменения работоспособности
Строки 11-47 выносишь в заголовочный файл (например mandata.h)
Строки 49-345 в файл реализации (mandata.cpp) // по необходимости добавить нужные инклюды
Всё остальное - в main.cpp
0
2 / 2 / 2
Регистрация: 17.03.2015
Сообщений: 147
24.05.2015, 13:21  [ТС]

Делаю как сказали, в h файле ловлю это
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.05.2015, 13:29
Цитата Сообщение от UltimateDoker Посмотреть сообщение
ловлю это
к этому файлу тоже относится:
Цитата Сообщение от Tulosba Посмотреть сообщение
по необходимости добавить нужные инклюды
В частности чтобы тип std::fstream был доступен.
0
2 / 2 / 2
Регистрация: 17.03.2015
Сообщений: 147
24.05.2015, 13:35  [ТС]
А теперь море ошибок синтаксиса, которые я писал выше
Прикладываю файл проекта, разделите мне безрукому, пожалуйста
Заодно посмотрю свои ошибки
TPTEST - Copy.rar
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.05.2015, 13:44
Лучший ответ Сообщение было отмечено UltimateDoker как решение

Решение

Цитата Сообщение от UltimateDoker Посмотреть сообщение
разделите мне безрукому, пожалуйста
Держи.
Вложения
Тип файла: zip TPTEST.zip (4.7 Кб, 20 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2015, 13:44
Помогаю со студенческими работами здесь

Не собирается проект, если main вынести в отдельный модуль
list.h #ifndef LISTCLASS_H #define LISTCLASS_H class list{ private: int myValue; list * myNext; public:

Вынести функции из класса
Здравствуйте нужно вынести функции из класса в сам main подскажите как реализовать: #include &lt;iostream&gt; #include...

Вынести обработку массивов в функции
Ребят, нужна небольшая помощь, есть готовая программа, где нужно обвести забором круглой формы несколько случайных точек, причем забор...

Как правильно вынести функции в методы?
Программа работает с двумя текстовыми файлами, создает массив объектов из двух объектов(в первом- строчки из первого файла, во втором-...

Как вынести функции во внешний файл
День добрый. Недавно начал изучать микроконтроллеры и написание кода на Си\С++ Освоил основы передачи данных по последовательному порту и...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru