Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56

Ошибка компиляции "List шаблон класса уже определен"

26.04.2023, 22:31. Показов 2159. Ответов 35

Студворк — интернет-сервис помощи студентам
Имеется заголовочный файл и файл реализации, при попытке компиляции выдает ошибку "List шаблон класса уже определен". Можете ли подсказать, как это исправить? Заранее спасибо!

.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
#pragma once
#include <iostream>
using namespace std;
template<typename T>
class List {
 
public:
 
    List() {
        size = 0;
        head = nullptr;
    }
    T Plus(int left_index, int right_index);
    int minus;
    void SetMinus(int left_index, int right_index);
    T GetMinus();
    void Delit(int left_index, int right_index);
    void push_back(T data);
public:
    T& operator[](const int index);
    int Getsize();
    class Node {
    public:
        Node* next;
        T data;
 
        Node(T data = T(), Node* next = nullptr);
    };
 
    int size;
    Node* head;
};


.chh
Кликните здесь для просмотра всего текста

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
#include "Header.h"
 
template<typename T>
class List {
 
public:
 
    List() {
        size = 0;
        head = nullptr;
    }
 
    T Plus(int left_index, int right_index) {
        return this->operator[](left_index) + this->operator[](right_index);
    }
    int minus;
    void SetMinus(int left_index, int right_index) {
        static int a, b;
        try {
            if (left_index <= -1 || right_index >= size + 1) {
                throw 1;
            }
            a = this->operator[](left_index);
            b = this->operator[](right_index);
            minus = a - b;
        }
        catch (int i) {
            cout << "Данные скорректированы" << endl;
            a = 0;
            b = size - 1;
            minus = a - b;
        }
    }
 
    T GetMinus() {
        return minus;
    }
 
    void Delit(int left_index, int right_index) {
        for (int i = left_index; i < right_index; i++) {
            cout << this->operator[](i) << endl;
        }
    }
    void push_back(T data) {
        if (head == nullptr) {
            head = new Node(data);
        }
        else {
            Node* current = this->head;
            while (current->next != nullptr) {
                current = current->next;
            }
            current->next = new  Node(data);
        }
        size++;
    }
public:
    T& operator[](const int index) {
        int counter = 0;
        Node* current = this->head;
        while (current != nullptr) {
            if (counter == index) {
                return current->data;
            }
            current = current->next;
            counter++;
        }
        return head->data;
    }
    int Getsize() { return size; }
 
    class Node {
    public:
        Node* next;
        T data;
 
        Node(T data = T(), Node* next = nullptr) {
            this->data = data;
            this->next = next;
        }
    };
 
    int size;
    Node* head;
};
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2023, 22:31
Ответы с готовыми решениями:

Ошибка C2953: шаблон класса уже определен
Доброго времени суток! Пытаюсь реализовать свой vector и iterator для него (файл v.h): #include &lt;stdexcept&gt; ...

Ошибка "Шаблон класса уже определен"
template &lt;class T&gt; struct Node //Структура, являющаяся звеном списка { public: T data; ...

Шаблон класса строк - ошибка компиляции
Добрый вечер. Пытаюсь выполнить упражнение с учебника. Gcc выдаёт следующее: /home/ilyuha21st/Projects/qtcreator/cpp_some1/main.cpp:148:...

35
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,416
30.04.2023, 14:32
Студворк — интернет-сервис помощи студентам
class это ключевое слово, а не класс
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.04.2023, 14:36
Цитата Сообщение от vlisp Посмотреть сообщение
Класс лист изобретён полвека назад.
Это шаблон. Причем параметризованный не только целевым типом, а так же и аллокатором. Каждая комбинация отдельный класс, но моё мнение std::list не идеален от слова совсем.
И всё это вообще не имеет отношения к тому на чём учиться.
Цитата Сообщение от vlisp Посмотреть сообщение
Если уж и учиться ООП, то на рациональных дробях, матрицах, больших числах и т.п.
vlisp, вы и правда думаете, что новичок может существенно улучшить математику обучаясь азам ООП?
vadim semenov, делая шаблон пишите всё в хедер. Разделение может пригодиться если вы хотите иметь возможность комбинировать хедер из двух субхедеров. Нет возможности в С++ полноценно отделить получив h/cpp. Импорт не случился (import).
Ещё раз: пишите всё в одном хедере. Если у вас задача, именно на разделение хедера, но стиле h/chh то тут тоже уже всё описано - перечитайте. В этом случае у вас не должно быть проблем, так как на лекциях всё говорилось ("нам ни чего не объяснили " - не прокатит).
0
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,416
30.04.2023, 15:02
IGPIGP, попробуйна. номиальный коэффициент вычислить на ++ без рациональных дробей.
0
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56
30.04.2023, 16:00  [ТС]
IGPIGP, как мне понять "делая шаблон пишите все в хедер"? Вы имеете в виду, что "Node" не надо расписывать в .cpp? А расписать его лишь в .h?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.04.2023, 17:14
Цитата Сообщение от vlisp Посмотреть сообщение
IGPIGP, попробуйна. номиальный коэффициент вычислить на ++ без рациональных дробей.
Хотите меня напугать? А слабо без компьютера винчестер прочесть? С обратного конца на ++.

Цитата Сообщение от vadim semenov Посмотреть сообщение
IGPIGP, как мне понять "делая шаблон пишите все в хедер"? Вы имеете в виду, что "Node" не надо расписывать в .cpp? А расписать его лишь в .h?
C++
1
2
3
4
5
6
7
class Node {
    public:
        Node* next;
        T data;
 
        Node(T data = T(), Node* next = nullptr);
    };
Это шаблон. Он объявлен внутри шаблона - списка и использует его шаблонный параметр typename T. Давайте ещё в третий раз попробуем.
vadim semenov, шаблоны определяются в одном файле. Пишите всё в одном заголовке.
0
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56
30.04.2023, 17:31  [ТС]
IGPIGP, у меня получился такой итоговый вариант:

.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
#pragma once
#include <iostream>
using namespace std;
template<typename T>
class List {
 
public:
 
    List();
    T Plus(int left_index, int right_index);
    int minus;
    void SetMinus(int left_index, int right_index);
    T GetMinus();
    void Delit(int left_index, int right_index);
    void push_back(T data);
public:
    T& operator[](const int index);
    int Getsize();
    class Node {
    public:
        Node* next;
        T data;
 
        Node(T data = T(), Node* next = nullptr) {
            this->data = data;
            this->next = next;
        }
    };
 
    int size;
    Node* head;
};


.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
#include "Header.h"
template<typename T>
List<T>::List()
{
    size = 0;
    head = nullptr;
}
int minus;
template<typename T>
T List<T>:: Plus(int left_index, int right_index) {
    return this->operator[](left_index) + this->operator[](right_index);
}
 
template<typename T>
void List<T>::SetMinus(int left_index, int right_index) {
    static int a, b;
    try {
        if (left_index <= -1 || right_index >= size + 1) {
            throw 1;
        }
        a = this->operator[](left_index);
        b = this->operator[](right_index);
        minus = a - b;
    }
    catch (int i) {
        cout << "Данные скорректированы" << endl;
        a = 0;
        b = size - 1;
        minus = a - b;
    }
}
template<typename T>
T List<T>::GetMinus() {
    return minus;
}
template<typename T>
void List<T>::Delit(int left_index, int right_index) {
    for (int i = left_index; i < right_index; i++) {
        cout << this->operator[](i) << endl;
    }
}
 
template<typename T>
void List<T>::push_back(T data) {
    if (head == nullptr) {
        head = new Node(data);
    }
    else {
        Node* current = this->head;
        while (current->next != nullptr) {
            current = current->next;
        }
        current->next = new  Node(data);
    }
    size++;
}
 
 
template<typename T>
 T& List<T>::operator[](const int index) {
    int counter = 0;
    Node* current = this->head;
    while (current != nullptr) {
        if (counter == index) {
            return current->data;
        }
        current = current->next;
        counter++;
    }
    return head->data;
}
 
 template<typename T>
 int List<T>::Getsize() { return size; }


Это верно? Или еще что-то исправить надо?
0
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,416
30.04.2023, 18:46
IGPIGP, вовсе нет и дело не в квалификации. Чтение диска—рутинная операция. Биномиальный коэфициент не считается, так как не влезает в даже в Лонг лонг
vadim semenov, не понял смысла того чего ты хотел. Но без деструктора—это мусор
0
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56
30.04.2023, 18:50  [ТС]
vlisp, правильно понимаю, что итоговой вариант должен выглядеть вот так?

.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
#pragma once
#include <iostream>
using namespace std;
 
template<typename T>
class List
{
public:
    struct Node;
    //-------------------------- 
private:
    static int minus; //непонятно назначение этого объекта
    int size{};//вообще-то, нужно size_t, а не int
    Node* head{};
 
    //-------------------------- 
public:
    struct Node
    {
        Node* next{};
        T data{};
    };
 
    T Plus(int left_index, int right_index) {
        return this->operator[](left_index) + this->operator[](right_index);
    }
 
    void SetMinus(int left_index, int right_index) {
        static int a, b;
        try {
            if (left_index <= -1 || right_index >= size + 1) {
                throw 1;
            }
            a = this->operator[](left_index);
            b = this->operator[](right_index);
            minus = a - b;
        }
        catch (int i) {
            std::cout << "Данные скорректированы" << std::endl;
            a = 0;
            b = size - 1;
            minus = a - b;
        }
    }
 
    T GetMinus() {
        return minus;
    }
 
    void Delit(int left_index, int right_index) {
        for (int i = left_index; i < right_index; i++) {
            std::cout << this->operator[](i) << std::endl;
        }
    }
 
    void push_back(T data) {
        if (head == nullptr) {
            head = new Node(data);
        }
        else {
            Node* current = this->head;
            while (current->next != nullptr) {
                current = current->next;
            }
            current->next = new  Node(data);
        }
        size++;
    }
 
    T& operator[](const int index) {
        int counter = 0;
        Node* current = this->head;
        while (current != nullptr) {
            if (counter == index) {
                return current->data;
            }
            current = current->next;
            counter++;
        }
        return head->data;
    }
 
    int Getsize() { return size; }
};



.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
#include "Header.h"
template<typename T>
List<T>::List()
{
    size = 0;
    head = nullptr;
}
int minus;
template<typename T>
T List<T>:: Plus(int left_index, int right_index) {
    return this->operator[](left_index) + this->operator[](right_index);
}
 
template<typename T>
void List<T>::SetMinus(int left_index, int right_index) {
    static int a, b;
    try {
        if (left_index <= -1 || right_index >= size + 1) {
            throw 1;
        }
        a = this->operator[](left_index);
        b = this->operator[](right_index);
        minus = a - b;
    }
    catch (int i) {
        cout << "Данные скорректированы" << endl;
        a = 0;
        b = size - 1;
        minus = a - b;
    }
}
template<typename T>
T List<T>::GetMinus() {
    return minus;
}
template<typename T>
void List<T>::Delit(int left_index, int right_index) {
    for (int i = left_index; i < right_index; i++) {
        cout << this->operator[](i) << endl;
    }
}
 
template<typename T>
void List<T>::push_back(T data) {
    if (head == nullptr) {
        head = new Node(data);
    }
    else {
        Node* current = this->head;
        while (current->next != nullptr) {
            current = current->next;
        }
        current->next = new  Node(data);
    }
    size++;
}
 
 
template<typename T>
 T& List<T>::operator[](const int index) {
    int counter = 0;
    Node* current = this->head;
    while (current != nullptr) {
        if (counter == index) {
            return current->data;
        }
        current = current->next;
        counter++;
    }
    return head->data;
}
 
 template<typename T>
 int List<T>::Getsize() { return size; }


Деструктор добавлю
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.04.2023, 19:42
Цитата Сообщение от vadim semenov Посмотреть сообщение
итоговой вариант должен выглядеть вот так?
Бросьте это дело. Может нужно пару дней. Потом ещё раз перечитать. И ещё пару дней. Надежда умирает с последним нейроном, - не отчаивайтесь.
0
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56
30.04.2023, 19:45  [ТС]
IGPIGP, что опять не так? Вынес шаблон в хедер, как и говорилось. Тут каждый человек пишет разное, как можно что-то понять?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.05.2023, 00:36
Цитата Сообщение от vadim semenov Посмотреть сообщение
что опять не так?
В хедер нужно выносить всё, а не только объявление шаблона. Всё то, что у вас сейчас в .cpp, должно быть в хедере.
0
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56
01.05.2023, 09:28  [ТС]
DrOffset, так?


.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
#pragma once
#include <iostream>
using namespace std;
 
 
template<typename T>
class List {
public:
 
    List() {
        size = 0;
        head = nullptr;
    }
 
    int plus;
     void SetPlus(int left_index, int right_index) {
        int a, b;
        try {
            if (left_index <= -1 || right_index >= size + 1) {
                throw 1;
            }
            a = this->operator[](left_index);
            b = this->operator[](right_index);
            plus = a + b;
        }
        catch (int i) {
            cout << "Данные скорректированы" << endl;
            a = 0;
            b = size - 1;
            plus = a + b;
        }
    }
 
    T GetPlus() {
         return plus;
     }
 
    int minus;
    void SetMinus(int left_index, int right_index) {
        int a, b;
        try {
            if (left_index <= -1 || right_index >= size + 1) {
                throw 1;
            }
            a = this->operator[](left_index);
            b = this->operator[](right_index);
            minus = a - b;
        }
        catch (int i) {
            cout << "Данные скорректированы" << endl;
            a = 0;
            b = size - 1;
            minus = a - b;
        }
    }
 
    T GetMinus() {
        return minus;
    }
 
    void Delit(int left_index, int right_index) {
        for (int i = left_index; i < right_index; i++) {
            cout << this->operator[](i) << endl;
        }
    }
    void push_back(T data) {
        if (head == nullptr) {
            head = new Node(data);
        }
        else {
            Node* current = this->head;
            while (current->next != nullptr) {
                current = current->next;
            }
            current->next = new  Node(data);
        }
        size++;
    }
public:
    T& operator[](const int index) {
        int counter = 0;
        Node* current = this->head;
        while (current != nullptr) {
            if (counter == index) {
                return current->data;
            }
            current = current->next;
            counter++;
        }
        return head->data;
    }
    int Getsize() { return size; }
 
    class Node {
    public:
        Node* next;
        T data;
 
        Node(T data = T(), Node* next = nullptr) {
            this->data = data;
            this->next = next;
        }
    };
 
    int size;
    Node* head;
};



.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
#include "Header2.h"
 
int main()
{
    setlocale(LC_ALL, "Russian");
    List <int> lst;
    int a, b;
    cout << "Введите количество элементов в массиве ";
    cin >> a;
    for (int i = 0; i < a; i++) {
        cin >> b;
        lst.push_back(b);
    }
    cout << "Вывод элементов " << endl;
    for (int i = 0; i < lst.Getsize(); i++) {
        cout << lst[i] << endl;
    }
    cout << "Сложение элементов: введите первый элемент и второй элемент " << endl;
    cin >> a;
    cin >> b;
    lst.SetPlus(a, b);
    cout << lst.GetPlus() << endl;
    cout << "Вычитание элементов: введите первый элемент и второй элемент " << endl;
    cin >> a;
    cin >> b;
    lst.SetMinus(a, b);
    cout << lst.GetMinus() << endl;
    cout << "Выписать часть списка " << endl;
    lst.Delit(0, 2);
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.05.2023, 10:22
vadim semenov, то как вы объявляете int plus, minus, говорит о том, что вам нужно вернутся к самому началу. Переменные. Области видимости, класс хранения, время жизни.
0
0 / 0 / 0
Регистрация: 20.04.2022
Сообщений: 56
01.05.2023, 10:34  [ТС]
IGPIGP, конструктивная критика, спасибо
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.05.2023, 11:14
Лучший ответ Сообщение было отмечено vadim semenov как решение

Решение

Цитата Сообщение от vadim semenov Посмотреть сообщение
так?
Да. Причем вносить определения функций шаблонного класса обратно внутрь класса было не обязательно.
1
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,416
01.05.2023, 11:29
Тс ты используешь список как массив.это глупо. Таки не написал деструктор.так и не доказал целесообразность велосипеда. Тебе нужно было наследовать лист от стандартного.
ЗЫ на этом форуме не принято помогать. В лучшем случае пишут готовое решение. Кажется это начинает приносить плоды. Так как общий уровень всего падает медленно, но уверенно.
Вот ты даже свое задание не написал. А по всему видно, что теоретическую безу в тебе не вложили или ты все прогулял через б.
И тем более ты хочешь побыстрее все закончить, а не разобраться.
Посмотри на Ютубе уроки по созданию классов и динамических списков и скомпилируй эту инфу. Это может помочь.
Потому что логику твоего велосипеда сложно понять без комментариев
Ну и создание новых тем тебе не поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2023, 11:29

Ошибка: Метод класса не определен. А он определен!
Всем привет! Столкнулся с такой проблемой. Есть класс, там методы. Вызываю метод в методе. Выдает Uncaught ReferenceError: setTime is...

Error LNK2005: /*конструструктор класса*/ уже определен в [имя проекта]. obj
Здравствуйте. Подскажите, пожалуйста. Я созд управляемый класс, он описан в отдельных модулях .h и .срр. Пытаюсь его подключить в...

Шаблон: Метод text() не определен для объекта класса TreeWidget
Есть код:template&lt;MainMenuGenerator::ElementTypes type, class T&gt; TreeWidgetItem *MainMenuGenerator::_addMenuItem(const String &amp;line, T...

Ошибка компиляции: идентификатор не определен
Приветствую всех. У меня такой вопрос , почему когда я пишу такой код, мне выдает ошибку на car* p_catalo = new car (идентификатор не...

Ошибка компиляции. __RPC__inout_xcount не определён
Всех приветствую. Решил я скомпилировать проект, но при компиляции выходят ошибки о неопределённых макросах __RPC__. Думал проблема в...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru