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

ERror C3861: идентификатор не найден

18.05.2022, 22:12. Показов 3342. Ответов 13

Студворк — интернет-сервис помощи студентам
В общем у меня есть задание: перенести программу с Си на С++. С плюсами знаком +- 2 часа, вот что слепил
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 <atomic>
#include <stdio.h>
using namespace std;
 
class ClassList
{public:
    typedef struct Node
    {
        int key;
        struct Node* next;
        struct Node* prev;
    } Node;
 
    // вспомогательная сущность, хранящая указатель на начало списка и его размер
    typedef struct
    {
        size_t size;
        Node* head;
        Node* tail;
    } List;
 
    // получение адреса элемента по его порядковому номеру (счет от 1 )
    Node* Get_node(const List list, const int number)
    {
        int i;
        Node* scan = list.head;
 
        for (i = 1; i < number; i++)
            scan = scan->next;
 
        return scan;
    }
    Node* Create_node(const int key)
    {
        Node* new_node = (Node*)malloc(sizeof(Node));
        if (new_node)
        {
            new_node->key = key;
            new_node->next = NULL;
            return new_node;
            free(new_node);
        }
    }
    // вставка элемента в начало списка
    List Insert(List list, const int key)
    {
        Node* add = Create_node(key);
        if (list.head != NULL)
            add->next = list.head;
        list.head = add;
        list.size++;
 
        return list;
    }
 
    // вывод списка на экран
    void Print(const List list)
    {
        Node* scan = list.head;
        printf("List items: ");
        while (scan)
        {
            printf("%d -> %p ", scan->key, scan->next);
            scan = scan->next;
        }
    }
 
    // удаление элемента из начала ЛОС
    List Pop_front(List list)
    {
        Node* del = list.head;
        list.head = del->next;
        free(del);
        list.size--;
 
        return list;
    }
 
   
 
    // обмен местами двух элементов ЛОС
    void Swap(List list, Node* const before1, Node* const before2)
    {
        Node* self1, * self2, * tmp;
        // before1 = Get_node(list, N1-1);
        // before2 = Get_node(list, N2-1);
        self1 = before1->next;
        self2 = before2->next;
        tmp = before1->next;
        before1->next = before2->next;
 
        before2->next = tmp;
        tmp = self1->next;
        self1->next = self2->next;
        self2->next = tmp;
 
    }
 
    List Append(List list, const int num)
    {
        Node* const add_node = Create_node(num);
        list.size++;
 
        // если список пуст
        if (!list.head)
        {
            list.head = list.tail = add_node;
            return list;
        }
 
        list.tail->next = add_node;
        list.tail = add_node;
 
        return list;
    }
 
    int Get_Value(List list, int N)
    {
        Node* tmp = Get_node(list, N);
        return tmp->key;
    }
 
    void Inverse_sublist(const List list, const int K, const int N)
    {
        int i, j;
        Node* left = Get_node(list, K - 1);
        Node* right;
 
        for (i = 0; i < N / 2; i++)
        {
            right = left;
            for (j = 0; j < (N - 2 * i); j++)
                right = right->next;
 
            Swap(list, left, right);
            left = left->next;
        }
    }
};
 
//--------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    logo();
    printf("В списке целых ненулевых элементов инвертировать K элементов начиная с N\n");
    srand((unsigned int)time(NULL));
    int i, tmpRand;
    int tmpHand[100]{};
    ClassList::Node* node_a = nullptr;
    ClassList::Node* node_b = nullptr;
 
    FILE* config;
    char Conf_Name[50] = "testo.cfg", buffer[100];
    int sposob = 0, elementov = 0, K = 0, N = 0;
if ((config = fopen(Conf_Name, "r")) == NULL) {
        puts("Config file error!!!");
        puts("Press Enter!!!");
        getchar(); exit(0);
    }
 
    fgets(buffer, 80, config);
    if (!strstr(buffer, "#!MYCONFIG")) {
        puts("Config file error!!!");
        puts("Press Enter!!!");
        getchar(); fclose(config);
        exit(0);
    }
 
    while (1)
    {
        fgets(buffer, 80, config);
        if (feof(config))break;
        if (buffer[0] == '#')continue;
        if (buffer[0] == '!') { puts(buffer); continue; }
        if (strstr(buffer, "sposob=")) {
            sposob = atoi(buffer + strlen("sposob="));
            continue;
        }
        if (strstr(buffer, "elementov=")) {
            elementov = atoi(buffer + strlen("elementov="));
            continue;
        }
        if (strstr(buffer, "K=")) {
            K = atoi(buffer + strlen("K="));
            continue;
        }
        if (strstr(buffer, "N=")) {
            N = atoi(buffer + strlen("N="));
            continue;
        }
 
    }
    puts("=============Result of parsing config file ========");
    printf("sposob = %d\n", sposob);
    printf("elementov = %d\n", elementov);
    printf("K = %d\n", K);
    printf("N = %d\n", N);
    puts("Press Enter!!!");
    getchar(); fclose(config);
 
 
    if (elementov > 20)
    {
        printf("Слишком много элементов в списке! Выход...\n");
        return 1;
    }
    if (sposob != 1 && sposob != 2)
    {
        printf("Некорректный способ заполнения списка\n");
        return 1;
    }
    if (K + N > elementov)
    {
        printf("Некорректные данные в конфигурационном файле (N + K > элементов\n)");
        return 1;
    }
    if (N > elementov)
    {
        printf("Некорректные данные: количество инвертируемых элементов больше чем элементов в списке\n");
        return 1;
    }
 
 
    // "объект" ЛОС с инициализацией
    ClassList::List list{};
    list.head = list.tail = NULL;
    list.size = 0;
 
    if (sposob == 2)
    {
        size_t t;
        for (i = 0; i < elementov; i++)
        {
            tmpRand = rand() % 100;
            list = Insert(list, tmpRand);
        }
        Print(list);
        Inverse_sublist(list, N, K);
        printf("\n\n");
        Print(list);
    }
    if (sposob == 1)
    {
        size_t t;
        for (int i = elementov; i > 0; i--)
        {
            printf("Введите элемент списка: \n");
            scanf("%d", &tmpHand[i]);
            list = Append(list, tmpHand[i]);
        }
        Print(list);
        Inverse_sublist(list, N, K);
        printf("\n\n");
        Print(list);
    }
}
При компиляции выдает следующие ошибки:
Code
1
2
3
4
5
6
7
8
9
1>List.cpp
1>C:\Users\Fin\source\repos\List\List\List.cpp(105,20): error C3861: Insert: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(107,9): error C3861: Print: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(108,9): error C3861: Inverse_sublist: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(110,9): error C3861: Print: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(119,20): error C3861: Append: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(121,9): error C3861: Print: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(122,9): error C3861: Inverse_sublist: идентификатор не найден
1>C:\Users\Fin\source\repos\List\List\List.cpp(124,9): error C3861: Print: идентификатор не найден
Помогите исправить =)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2022, 22:12
Ответы с готовыми решениями:

Error C3861: _T: идентификатор не найден
Код ниже в картинке. Урок NeHe по инициализации окна Windows

Error C3861: _tcsdup: идентификатор не найден
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &lt;iostream&gt; #include...

error C3861: puttext: идентификатор не найден
Помогите разобраться: visualStudio 8 выдает сообщение error C3861: puttext: идентификатор не найден, хотя conio.h подключен #include...

13
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
19.05.2022, 09:07
Лучший ответ Сообщение было отмечено lethe1337 как решение

Решение

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <ctime>
//#include <stdio.h>
using namespace std;
struct Node
{
    int key;
    struct Node* next;
    struct Node* prev;
};
struct List
{
    size_t size;
    Node* head;
    Node* tail;
};
 
 
// получение адреса элемента по его порядковому номеру (счет от 1 )
Node* Get_node(const List& list, int number)
{
    int i;
    Node* scan = list.head;
 
    for (i = 1; i < number; i++)
        scan = scan->next;
 
    return scan;
}
Node* Create_node(int key)
{
    Node* new_node = (Node*)malloc(sizeof(Node));
    new_node->key = key;
    new_node->next = NULL;
    return new_node;
    //free(new_node);  ?????????????
}
// вставка элемента в начало списка
List Insert(List list, const int key)
{
    Node* add = Create_node(key);
    if (list.head != NULL)
        add->next = list.head;
    list.head = add;
    list.size++;
 
    return list;
}
 
// вывод списка на экран
void Print(const List list)
{
    Node* scan = list.head;
    printf("List items: ");
    while (scan)
    {
        printf("%d -> %p ", scan->key, scan->next);
        scan = scan->next;
    }
}
 
// удаление элемента из начала ЛОС
List Pop_front(List list)
{
    Node* del = list.head;
    list.head = del->next;
    free(del);
    list.size--;
 
    return list;
}
 
 
 
// обмен местами двух элементов ЛОС
void Swap(List list, Node* const before1, Node* const before2)
{
    Node* self1, * self2, * tmp;
    // before1 = Get_node(list, N1-1);
    // before2 = Get_node(list, N2-1);
    self1 = before1->next;
    self2 = before2->next;
    tmp = before1->next;
    before1->next = before2->next;
 
    before2->next = tmp;
    tmp = self1->next;
    self1->next = self2->next;
    self2->next = tmp;
 
}
 
List Append(List list, const int num)
{
    Node* const add_node = Create_node(num);
    list.size++;
 
    // если список пуст
    if (!list.head)
    {
        list.head = list.tail = add_node;
        return list;
    }
 
    list.tail->next = add_node;
    list.tail = add_node;
 
    return list;
}
 
int Get_Value(List list, int N)
{
    Node* tmp = Get_node(list, N);
    return tmp->key;
}
 
void Inverse_sublist(const List list, const int K, const int N)
{
    int i, j;
    Node* left = Get_node(list, K - 1);
    Node* right;
 
    for (i = 0; i < N / 2; i++)
    {
        right = left;
        for (j = 0; j < (N - 2 * i); j++)
            right = right->next;
 
        Swap(list, left, right);
        left = left->next;
    }
}
 
//--------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    //logo();
    printf("В списке целых ненулевых элементов инвертировать K элементов начиная с N\n");
    srand((unsigned int)time(NULL));
    int i, tmpRand;
    int tmpHand[100]={};
    //ClassList::Node* node_a = 0;
    //ClassList::Node* node_b = 0;
 
    FILE* config;
    char Conf_Name[50] = "testo.cfg", buffer[100];
    int sposob = 0, elementov = 0, K = 0, N = 0;
    if ((config = fopen(Conf_Name, "r")) == NULL) {
        puts("Config file error!!!");
        puts("Press Enter!!!");
        getchar(); exit(0);
    }
 
    fgets(buffer, 80, config);
    if (!strstr(buffer, "#!MYCONFIG")) {
        puts("Config file error!!!");
        puts("Press Enter!!!");
        getchar(); fclose(config);
        exit(0);
    }
 
    while (true)
    {
        fgets(buffer, 80, config);
        if (feof(config))break;
        if (buffer[0] == '#')continue;
        if (buffer[0] == '!') { puts(buffer); continue; }
        if (strstr(buffer, "sposob=")) {
            sposob = atoi(buffer + strlen("sposob="));
            continue;
        }
        if (strstr(buffer, "elementov=")) {
            elementov = atoi(buffer + strlen("elementov="));
            continue;
        }
        if (strstr(buffer, "K=")) {
            K = atoi(buffer + strlen("K="));
            continue;
        }
        if (strstr(buffer, "N=")) {
            N = atoi(buffer + strlen("N="));
            continue;
        }
 
    }
    puts("=============Result of parsing config file ========");
    printf("sposob = %d\n", sposob);
    printf("elementov = %d\n", elementov);
    printf("K = %d\n", K);
    printf("N = %d\n", N);
    puts("Press Enter!!!");
    getchar(); fclose(config);
 
 
    if (elementov > 20)
    {
        printf("Слишком много элементов в списке! Выход...\n");
        return 1;
    }
    if (sposob != 1 && sposob != 2)
    {
        printf("Некорректный способ заполнения списка\n");
        return 1;
    }
    if (K + N > elementov)
    {
        printf("Некорректные данные в конфигурационном файле (N + K > элементов\n)");
        return 1;
    }
    if (N > elementov)
    {
        printf("Некорректные данные: количество инвертируемых элементов больше чем элементов в списке\n");
        return 1;
    }
 
 
    // "объект" ЛОС с инициализацией
    List list;
    list.head = list.tail = NULL;
    list.size = 0;
 
    if (sposob == 2)
    {
        for (i = 0; i < elementov; i++)
        {
            tmpRand = rand() % 100;
            list=Insert(list,tmpRand);
        }
        Print(list);
        Inverse_sublist(list, N, K);
        printf("\n\n");
        Print(list);
    }
    if (sposob == 1)
    {
        for (int i = elementov; i > 0; i--)
        {
            printf("Введите элемент списка: \n");
            scanf("%d", &tmpHand[i]);
            list = Append(list, tmpHand[i]);
        }
        Print(list);
        Inverse_sublist(list, N, K);
        printf("\n\n");
        Print(list);
    }
}
1
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
19.05.2022, 11:10  [ТС]
zss, Вылезло это
Code
1
2
3
4
5
6
7
8
9
10
11
12
1>List.obj : error LNK2005: "struct List __cdecl Append(struct List,int)" (?Append@@YA?AUList@@U1@H@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "struct Node * __cdecl Create_node(int)" (?Create_node@@YAPEAUNode@@H@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "int __cdecl Get_Value(struct List,int)" (?Get_Value@@YAHUList@@H@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "struct Node * __cdecl Get_node(struct List const &,int)" (?Get_node@@YAPEAUNode@@AEBUList@@H@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "struct List __cdecl Insert(struct List,int)" (?Insert@@YA?AUList@@U1@H@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "void __cdecl Inverse_sublist(struct List,int,int)" (?Inverse_sublist@@YAXUList@@HH@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "struct List __cdecl Pop_front(struct List)" (?Pop_front@@YA?AUList@@U1@@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "void __cdecl Print(struct List)" (?Print@@YAXUList@@@Z) уже определен в Class.obj
1>List.obj : error LNK2005: "void __cdecl Swap(struct List,struct Node * const,struct Node * const)" (?Swap@@YAXUList@@QEAUNode@@1@Z) уже определен в Class.obj
1>C:\Users\Fin\source\repos\List\x64\Debug\List.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>Сборка проекта "List.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, сбой: 1, в актуальном состоянии: 0, пропущено: 0==========
Добавлено через 4 минуты
Моя ошибка, у меня в папке с этим проектом был Class.cpp, в котором были написаны эти функции. Все работает!
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
19.05.2022, 21:14  [ТС]
zss, А можете объяснить, пожалуйста, в чем была ошибка?

Добавлено через 24 минуты
Оказалось, что это нужно реализовать через классы.
Header.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Funcs
{
    friend class Class;
 
public:
    struct Node* next;
    struct List;
    Node* Get_node(const List& list, int number);
    Node* Create_node(int key);
    // вставка элемента в начало списка
    List Insert(List list, const int key);
    // вывод списка на экран
    void Print(const List list);
    // удаление элемента из начала ЛОС
    List Pop_front(List list);
    // обмен местами двух элементов ЛОС
    void Swap(List list, Node* const before1, Node* const before2);
    List Append(List list, const int num);
    int Get_Value(List list, int N);
    void Inverse_sublist(const List list, const int K, const int N);
  
};
Header.cpp
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
#include "Header.h"
#include <atomic>
#include<stdio.h>
 
using namespace std;
 
class Class
{
    friend class Funcs;
 
public:
    struct Node
    {
        int key;
        struct Node* next;
        struct Node* prev;
    };
    struct List
    {
        size_t size;
        Node* head;
        Node* tail;
    };
    // получение адреса элемента по его порядковому номеру (счет от 1 )
    Node* Get_node(const List& list, int number)
    {
        int i;
        Node* scan = list.head;
 
        for (i = 1; i < number; i++)
            scan = scan->next;
 
        return scan;
    }
 
    Node* Create_node(int key)
    {
        Node* new_node = (Node*)malloc(sizeof(Node));
        new_node->key = key;
        new_node->next = NULL;
        return new_node;
        //free(new_node);  ?????????????
    }
    // вставка элемента в начало списка
    List Insert(List list, const int key)
    {
        Node* add = Create_node(key);
        if (list.head != NULL)
            add->next = list.head;
        list.head = add;
        list.size++;
 
        return list;
    }
 
    // вывод списка на экран
    void Print(const List list)
    {
        Node* scan = list.head;
        printf("List items: ");
        while (scan)
        {
            printf("%d -> %p ", scan->key, scan->next);
            scan = scan->next;
        }
    }
 
    // удаление элемента из начала ЛОС
    List Pop_front(List list)
    {
        Node* del = list.head;
        list.head = del->next;
        free(del);
        list.size--;
 
        return list;
    }
 
 
 
    // обмен местами двух элементов ЛОС
    void Swap(List list, Node* const before1, Node* const before2)
    {
        Node* self1, * self2, * tmp;
        // before1 = Get_node(list, N1-1);
        // before2 = Get_node(list, N2-1);
        self1 = before1->next;
        self2 = before2->next;
        tmp = before1->next;
        before1->next = before2->next;
 
        before2->next = tmp;
        tmp = self1->next;
        self1->next = self2->next;
        self2->next = tmp;
 
    }
 
    List Append(List list, const int num)
    {
        Node* const add_node = Create_node(num);
        list.size++;
 
        // если список пуст
        if (!list.head)
        {
            list.head = list.tail = add_node;
            return list;
        }
 
        list.tail->next = add_node;
        list.tail = add_node;
 
        return list;
    }
 
    int Get_Value(List list, int N)
    {
        Node* tmp = Get_node(list, N);
        return tmp->key;
    }
 
    void Inverse_sublist(const List list, const int K, const int N)
    {
        int i, j;
        Node* left = Get_node(list, K - 1);
        Node* right;
 
        for (i = 0; i < N / 2; i++)
        {
            right = left;
            for (j = 0; j < (N - 2 * i); j++)
                right = right->next;
 
            Swap(list, left, right);
            left = left->next;
        }
    }
};
в List.cpp код тот же, что и после main(), но при компиляции вылазят те же ошибки, что и в прошлый раз: идентификатор не найден. Как это можно исправить?
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
20.05.2022, 06:17
Лучший ответ Сообщение было отмечено lethe1337 как решение

Решение

Цитата Сообщение от lethe1337 Посмотреть сообщение
нужно реализовать через классы
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <ctime>
//#include <stdio.h>
using namespace std;
struct Node
{
    int key;
    struct Node* next;
    struct Node* prev;
};
struct List
{
private:
    size_t size;
    Node* head;
    Node* tail;
public:
    List()
    {   
        head = tail = NULL;
        size = 0;
    }
// !!!! правило трех:
    ~List()
    {
        // Допишите удаление всего списка
    }
    List(const List& b)
    {
        // допишите копирование списка b в список *this
    }
    List& operator=(const List& b)
    {
        if(this!=&b)
        {
            // допишите копирование списка b в список *this
        }
        return *this;
    }
 
    Node* Get_node(int number);
    Node* Create_node(int key);
    void Insert(const int key);
    void Print();
    void Pop_front();
    void Swap(Node* const before1, Node* const before2);
    void Append(const int num);
    int Get_Value(int N);
    void Inverse_sublist(const int K, const int N);
};
 
 
// получение адреса элемента по его порядковому номеру (счет от 1 )
Node* List::Get_node(int number)
{
    int i;
    Node* scan = this->head;
 
    for (i = 1; i < number; i++)
        scan = scan->next;
 
    return scan;
}
Node* List::Create_node(int key)
{
    Node* new_node = (Node*)malloc(sizeof(Node));
    new_node->key = key;
    new_node->next = NULL;
    return new_node;
}
// вставка элемента в начало списка
void List::Insert(const int key)
{
    Node* add = Create_node(key);
    if (this->head != NULL)
        add->next = this->head;
    this->head = add;
    this->size++;
}
 
// вывод списка на экран
void List::Print()
{
    Node* scan = this->head;
    printf("List items: ");
    while (scan)
    {
        printf("%d -> %p ", scan->key, scan->next);
        scan = scan->next;
    }
}
 
// удаление элемента из начала ЛОС
void List::Pop_front()
{
    Node* del = this->head;
    this->head = del->next;
    free(del);
    this->size--;
}
 
 
 
// обмен местами двух элементов ЛОС
void List::Swap(Node* const before1, Node* const before2)
{
    Node* self1, * self2, * tmp;
    // before1 = Get_node(list, N1-1);
    // before2 = Get_node(list, N2-1);
    self1 = before1->next;
    self2 = before2->next;
    tmp = before1->next;
    before1->next = before2->next;
 
    before2->next = tmp;
    tmp = self1->next;
    self1->next = self2->next;
    self2->next = tmp;
 
}
 
void List::Append(const int num)
{
    Node* const add_node = Create_node(num);
    this->size++;
 
    // если список пуст
    if (!this->head)
    {
        this->head = this->tail = add_node;
    }
 
    this->tail->next = add_node;
    this->tail = add_node;
}
 
int List::Get_Value(int N)
{
    Node* tmp = Get_node(N);
    return tmp->key;
}
 
void List::Inverse_sublist(const int K, const int N)
{
    int i, j;
    Node* left = Get_node(K - 1);
    Node* right;
 
    for (i = 0; i < N / 2; i++)
    {
        right = left;
        for (j = 0; j < (N - 2 * i); j++)
            right = right->next;
 
        Swap(left, right);
        left = left->next;
    }
}
 
//--------------------------------------------------------------
 
int main(int argc, char* argv[])
{
    //logo();
    printf("В списке целых ненулевых элементов инвертировать K элементов начиная с N\n");
    srand((unsigned int)time(NULL));
    int i, tmpRand;
    int tmpHand[100]={};
    //ClassList::Node* node_a = 0;
    //ClassList::Node* node_b = 0;
 
    FILE* config;
    char Conf_Name[50] = "testo.cfg", buffer[100];
    int sposob = 0, elementov = 0, K = 0, N = 0;
    if ((config = fopen(Conf_Name, "r")) == NULL) {
        puts("Config file error!!!");
        puts("Press Enter!!!");
        getchar(); exit(0);
    }
 
    fgets(buffer, 80, config);
    if (!strstr(buffer, "#!MYCONFIG")) {
        puts("Config file error!!!");
        puts("Press Enter!!!");
        getchar(); fclose(config);
        exit(0);
    }
 
    while (true)
    {
        fgets(buffer, 80, config);
        if (feof(config))break;
        if (buffer[0] == '#')continue;
        if (buffer[0] == '!') { puts(buffer); continue; }
        if (strstr(buffer, "sposob=")) {
            sposob = atoi(buffer + strlen("sposob="));
            continue;
        }
        if (strstr(buffer, "elementov=")) {
            elementov = atoi(buffer + strlen("elementov="));
            continue;
        }
        if (strstr(buffer, "K=")) {
            K = atoi(buffer + strlen("K="));
            continue;
        }
        if (strstr(buffer, "N=")) {
            N = atoi(buffer + strlen("N="));
            continue;
        }
 
    }
    puts("=============Result of parsing config file ========");
    printf("sposob = %d\n", sposob);
    printf("elementov = %d\n", elementov);
    printf("K = %d\n", K);
    printf("N = %d\n", N);
    puts("Press Enter!!!");
    getchar(); fclose(config);
 
 
    if (elementov > 20)
    {
        printf("Слишком много элементов в списке! Выход...\n");
        return 1;
    }
    if (sposob != 1 && sposob != 2)
    {
        printf("Некорректный способ заполнения списка\n");
        return 1;
    }
    if (K + N > elementov)
    {
        printf("Некорректные данные в конфигурационном файле (N + K > элементов\n)");
        return 1;
    }
    if (N > elementov)
    {
        printf("Некорректные данные: количество инвертируемых элементов больше чем элементов в списке\n");
        return 1;
    }
 
 
    // "объект" ЛОС с инициализацией
    List list;
    //list.head = list.tail = NULL;
    //list.size = 0;
 
    if (sposob == 2)
    {
        for (i = 0; i < elementov; i++)
        {
            tmpRand = rand() % 100;
            list.Insert(tmpRand);
        }
        list.Print();
        list.Inverse_sublist(N, K);
        printf("\n\n");
        list.Print();
    }
    if (sposob == 1)
    {
        for (int i = elementov; i > 0; i--)
        {
            printf("Введите элемент списка: \n");
            scanf("%d", &tmpHand[i]);
            list.Append(tmpHand[i]);
        }
        list.Print();
        list.Inverse_sublist(N, K);
        printf("\n\n");
        list.Print();
    }
}
Я не проверял правильность методов.
Только перенес Ваш код в класс.
Обратите внимание на ненаписанные методы относящиеся к
ПРАВИЛУ ТРЕХ.
Если их не реализуете, то будут ошибки исполнения.
1
0 / 0 / 0
Регистрация: 05.08.2021
Сообщений: 209
07.06.2023, 22:23
У меня эта ошибка возникла в программе по генерации звуков для громкоговорителя. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
/* сигнал1 */
/* заставляет громкоговоритель подавать сигнал */
#include<stdio.h>
int main()
{
    int store;
    store = inp(97); /* запоминание начального значения с помощью порта 97 */
    printf("пopт 97 = %d \n", store); /* проверка результатов*/
    outp(97, 79); /* посылает 79 в порт 97; включение громкоговорителя */
    outp(97, store); /* восстановление начального значения */
}
. Хочу с ней разобраться.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
08.06.2023, 01:45
KZProg, Ошибка. Не определен идентификатор outp, inp
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.06.2023, 10:16
lethe1337, вы, скорее всего, не дали полный текст сообщений компилятора. Покажите. И номера строк сопроводите словесными ссылками, так как номера строк здесь (на сайте) и у вас, обычно разные.
По вашему тексту я вижу, что компилятор "отвалился" от Insert и далее. Можно поискать ошибку чуть выше. Смотрим методы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 Node* Get_node(const List& list, int number)
    {
        int i;
        Node* scan = list.head;
 
        for (i = 1; i < number; i++)
            scan = scan->next;
 
        return scan;
    }
 
    Node* Create_node(int key)
    {
        Node* new_node = (Node*)malloc(sizeof(Node));
        new_node->key = key;
        new_node->next = NULL;
        return new_node;
        //free(new_node);  ?????????????
    }
Обратите внимание на то, что вы пытаетесь передать константную ссылку на List list, а потом пытаетесь создать неконстантный указатель на член этого константного list:
C++
1
   Node* scan = list.head;
Компилятор должен прямо вот тут обидеться и перестать. Тогда все что ниже может просто не скомпилироваться и станет "неизвестным". Впрочем, может я и не прав. Дайте полный текст всего билд-сообщения. И установите опцию debug для билда. Хотя это, как С-программист, вы, наверное, знаете.
0
0 / 0 / 0
Регистрация: 05.08.2021
Сообщений: 209
08.06.2023, 19:00
OwenGlendower, Понял. Спасибо.
0
0 / 0 / 0
Регистрация: 05.08.2021
Сообщений: 209
16.06.2023, 22:21
У меня эта ошибка возникла при создании программы по написанию фирменного бланка. Вот код:
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
/* титул фирменного бланка */
#include <iostream>
#define NAME "MEGATHINK, INC."
#define ADDRESS "10 Megabuck Plaza"
#define PLACE "Megapolis, CA 94904"
 
int main()
{
    starbar();
    std::cout << NAME << std::endl;
    std::cout << ADDRESS << std::endl;
    std::cout << PLACE << std::endl;
    starbar();
    return 0;
}
 
/* далее следует функция starbar( ) */
#include <iostream>
#define LIMIT 65
 
void starbar()
{
    int count;
    for (count = 1; count <= LIMIT; count++)
        std::cout << '*';
    std::cout << std::endl;
}
. Репозиторий - https://github.com/KZProgRus20... go-blanka-.

Добавлено через 1 час 20 минут
Всё! Проблема решилась!
0
0 / 0 / 0
Регистрация: 05.08.2021
Сообщений: 209
17.06.2023, 11:24
Вот ещё:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* контроль адресов */
#include <iostream>
int main()
{
    int pooh = 2, bah = 5;
    std::cout << " ? main( ), pooh = " << pooh << " ? &pooh = " << &pooh << std::endl;
    std::cout << "B main( ), bah = " << bah << " ? &bah = " << &bah << std::endl;
    mikado(pooh);
}
 
void mikado(int bah)
{
    int pooh = 10;
    std::cout << "B mikado( ), pooh = " << pooh << " ? &pooh = " << &pooh << std::endl;
    std::cout << " ? mikado( ), bah = " << bah << " ? &bah = " << &bah << std::endl;
}
.
Вот репозиторий: https://github.com/KZProgRus2023/Operacia-
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
17.06.2023, 11:42
KZProg, в двух примерах одна и та же проблема. Если вы уже решили первую, то в чем трудность со второй?
Кликните здесь для просмотра всего текста
Определение и объявление функций, раздел "Объявление функции".
0
0 / 0 / 0
Регистрация: 05.08.2021
Сообщений: 209
17.06.2023, 11:44
И ещё:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main()
{
    int x = 5, y = 10;
    std::cout << "Before interchange x = " << x << " y = " << y << std::endl;
    interchange(x, y);
    std::cout << "After interchange x = " << x << " y = " << y << std::endl;
    return 0;
}
 
void interchange(int u, int v)
{
    int temp;
    temp = u;
    u = v;
    v = temp;
}
. Репозиторий - https://github.com/KZProgRus20... o-proverki.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
17.06.2023, 13:20
KZProg, Вам четко указали, что компилятор не видит описания функций (и переменных), если они встречаются только ниже по коду.
Потому надо делать предварительные объявления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void interchange(int u, int v); // объявление (прототип) функции
int main()
{
...
    interchange(x, y); // вызов функции
...
}
 
void interchange(int u, int v) // описание функции
{
.....
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2023, 13:20
Помогаю со студенческими работами здесь

Error C3861: sqr: идентификатор не найден
Подскажите, что с программой не так то? Ошибка 1 error C3861: sqr: идентификатор не найден 2 IntelliSense: идентификатор «sqr» не...

Ошибка error C3861 идентификатор не найден
Делаю проект ATL Project В одном из методов хочу вызвать функцию, которая проверит дату. На вызове функции ошибка error C3861: getsec:...

Error C3861 delete_list идентификатор не найден
Помогите разобраться с ошибкой, ругается на delete_list(&amp;tail); #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...

error C3861: Low: идентификатор не найден
error C3861: Low: идентификатор не найден error C2146: синтаксическая ошибка: отсутствие &quot;;&quot; перед идентификатором error...

Error C3861: CorrectInput: идентификатор не найден
Добрый день. Столкнулся с непонятной для меня проблемой при выполнение очередной лабораторки. При попытке компиляции вылетает ошибка...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru