Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 25.05.2018
Сообщений: 7

Ошибка при компиляции при переходе с vs 2012 на 2015

25.05.2018, 11:17. Показов 1641. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once
#include <windows.h>
#include <windowsx.h>
 
 
 
class CBall
{
    
public:
    double x, y;
    double v_x, v_y;
    double r;
    RECT rect; //описывает прямоугольник границ окна
 
 
    CBall(void);
    virtual ~CBall(void);
 
    virtual void SetParams(double x, double y, double r, double v_x, double v_y, RECT rect);
    void Draw(HDC dc);
    virtual void Move(DWORD delta_ticks);
    void SetBounds(RECT bnds);
};
C++ (Qt)
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
#include "CBall.h"
 
 
 
 
void CBall::SetParams(double x, double y, double r, double v_x, double v_y, RECT rect)
{
    this->x = x;
    this->y = y;
    this->r = r;
    this->v_x = v_x;
    this->v_y = v_y;
    this->rect = rect;
}
 
void CBall::Move(DWORD delta_ticks)
{
    //рассчет времени между движениями в секундах
    double s_delta = ((double)(delta_ticks)) / 1000.0;
 
    if ((this->x >= rect.right - r) && (this->v_x > 0))
        this->v_x = -(this->v_x);
    if ((this->x <= r) && (this->v_x < 0))
        this->v_x = -(this->v_x);
    if ((this->y >= rect.bottom - r) && (this->v_y > 0))
        this->v_y = -(this->v_y);
    if ((this->y <= r) && (this->v_y < 0))
        this->v_y = -(this->v_y);
 
 
 
 
    double dx = v_x*s_delta;
    double dy = v_y*s_delta;
 
    this->x += dx;
    this->y += dy;
}
 
CBall::CBall(void) {}
CBall::~CBall(void) {}
 
 
 
 
 
void CBall::Draw(HDC dc)
{
    //HBRUSH hOldBrush;
    //hOldBrush = SelectBrush(dc, hBrush);
    Ellipse(dc, x - r, y - r, x + r, y + r);
    //SelectBrush(dc, hOldBrush);
}
 
 
 
void CBall::SetBounds(RECT bnds)
{
    this->rect = bnds;
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
#include "CBall.h"
#include "CColoredBall.h"
 
 
class CBallsArray
{
    CBall* *balls; //массив шаров 
    int count; //число шаров в массиве
    int max_balls; //максимальное число шаров в массиве
public:
    CBallsArray(int max_balls);
    virtual ~CBallsArray(void);
    CColoredBall* AddColoredBall();
    CBall* Add();
    void SetBounds(RECT bnds);
    void Move(DWORD ticks);
    void Draw(HDC dc);
 
 
};
C++ (Qt)
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
#include "CBallsArray.h"
 
 
 
CBallsArray::CBallsArray(int max_balls)
{
    this->count = 0;
    this->max_balls = max_balls;
    this->balls = new CBall*[max_balls];
}
 
CBallsArray::~CBallsArray(void)
{
    for (int i = 0; i < count; i++)
        delete this->balls[i];
    delete[] this->balls;
}
 
CBall* CBallsArray::Add()
{
    if (count >= max_balls)
        return NULL;
    count++;
    balls[count - 1] = new CBall();
    return balls[count - 1];
}
 
CColoredBall* CBallsArray::AddColoredBall()
{
    if (count >= max_balls)
        return NULL;
    count++;
    balls[count - 1] = new CColoredBall();
    return (CColoredBall*)(balls[count - 1]);
}
 
void CBallsArray::SetBounds(RECT bnds)
{
    for (int i = 0; i < count; i++)
        balls[i]->SetBounds(bnds);
}
 
void CBallsArray::Move(DWORD ticks)
{
    CBall* ball1;
    CBall* ball2;
 
    for (int i = 0; i < count; i++)
    {
        for (int j = i + 1; j < count; j++)
        {
            ball1 = this->balls[i];
            ball2 = this->balls[j];
 
            double C_x = ball2->x - ball1->x;
            double C_y = ball2->y - ball1->y;
            double C2 = C_x * C_x + C_y * C_y;
 
            if (C2 <= ((ball1->r + ball2->r) * (ball1->r + ball2->r)))
            {
                double AC_scaler = ball1->v_x * C_x + ball1->v_y * C_y;
                double BC_scaler = ball2->v_x * C_x + ball2->v_y * C_y;
 
                double Ap_v_x = (C_x * AC_scaler) / C2;
                double Ap_v_y = (C_y * AC_scaler) / C2;
                double At_v_x = ball1->v_x - Ap_v_x;
                double At_v_y = ball1->v_y - Ap_v_y;
 
                double Bp_v_x = (C_x * BC_scaler) / C2;
                double Bp_v_y = (C_y * BC_scaler) / C2;
                double Bt_v_x = ball2->v_x - Bp_v_x;
                double Bt_v_y = ball2->v_y - Bp_v_y;
 
                ball1->v_x = Bp_v_x + At_v_x;
                ball1->v_y = Bp_v_y + At_v_y;
                ball2->v_x = Ap_v_x + Bt_v_x;
                ball2->v_y = Ap_v_y + Bt_v_y;
            }
        }
    }
 
    for (int i = 0; i <count; i++)
        balls[i]->Move(ticks);
}
 
void CBallsArray::Draw(HDC dc)
{
 
    for (int i = 0; i <count; i++)
        balls[i]->Draw(dc);
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once
#include <windows.h>
#include <windowsx.h>
#include "CBall.h"
#include "CColoredBall.h"
#include "math.h"
 
 
class CBallSettingsMonitor
{
    double angle;
    double speed;
public:
    CBallSettingsMonitor(void);
    ~CBallSettingsMonitor(void);
    void Draw(HDC dc);
    void SpeedUp();
    void SpeedDown();
    void AngleUp();
    void AngleDown();
 
    void GetVXVY(double& v_x, double& v_y);
 
};
C++ (Qt)
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
#include "CBallSettingsMonitor.h"
 
 
 
CBallSettingsMonitor::CBallSettingsMonitor(void)
{
    this->angle = 45;
    this->speed = 50;
 
}
CBallSettingsMonitor::~CBallSettingsMonitor(void) {}
 
 
void CBallSettingsMonitor::SpeedUp()
{
    if (this->speed < 120)
        speed++;
}
 
void CBallSettingsMonitor::SpeedDown()
{
    if (this->speed > 10)
        speed--;
}
 
void CBallSettingsMonitor::AngleUp()
{
    angle++;
    if (angle >= 360)
        angle = 0;
}
 
void CBallSettingsMonitor::AngleDown()
{
    angle--;
    if (angle <= 0)
        angle = 360;
}
 
void CBallSettingsMonitor::GetVXVY(double& v_x, double& v_y)
{
    double rad_angle = (this->angle / 180) * 3.1415;
    v_x = this->speed * cos(rad_angle);
    v_y = this->speed * sin(rad_angle);
}
 
void CBallSettingsMonitor::Draw(HDC dc)
{
    double halfspeed = ((this->speed / 120) * 30) / 2;
    double rad_angle = (this->angle / 180) * 3.1415;
 
    double x = halfspeed * cos(rad_angle);
    double y = halfspeed * sin(rad_angle);
 
    Rectangle(dc, 0, 0, 30, 30);
    MoveToEx(dc, 15 - x, 15 - y, NULL);
    LineTo(dc, 15 + x, 15 + y);
    Ellipse(dc, 15 + x - 2, 15 + y - 2, 15 + x + 2, 15 + y + 2);
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include "CBall.h"
 
 
class CColoredBall :
    public CBall
{
    HBRUSH brush;
public:
    
    CColoredBall(void);
    virtual ~CColoredBall(void);
    virtual void SetColor(unsigned char r, unsigned char g, unsigned char b);
    virtual void Draw(HDC dc);
};
C++ (Qt)
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
#include "CColoredBall.h"
 
 
CColoredBall::CColoredBall(void)
{
    this->brush = CreateSolidBrush(RGB(0, 0, 0));
 
}
 
CColoredBall::~CColoredBall(void)
{
    DeleteBrush(this->brush);
}
 
void CColoredBall::SetColor(unsigned char r, unsigned char g, unsigned char b)
{
    DeleteBrush(this->brush);
    this->brush = CreateSolidBrush(RGB(r, g, b));
}
 
void CColoredBall::Draw(HDC dc)
{
    HBRUSH old = SelectBrush(dc, this->brush);
    Ellipse(dc, x - r, y - r, x + r, y + r);
    SelectBrush(dc, old);
 
}
 
void CBall::SetParams(double x, double y, double r, double v_x, double v_y, RECT rect)
{
    this->x = x;
    this->y = y;
    this->r = r;
    this->v_x = v_x;
    this->v_y = v_y;
    this->rect = rect;
}
Основный файл программы

C++ (Qt)
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
#include <windows.h>
#include <WindowsX.h>
#include "CBall.h"
#include "CBallsArray.h"
#include "CBallSettingsMonitor.h"
#include "CColoredBall.h"
 
 
 
HINSTANCE g_hInstance;
int g_nCmdShow;
HWND g_mainWnd;
CBallsArray balls(50);
CBallSettingsMonitor monitor;
DWORD prev_frame_time;
RECT rect_wndSize;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
 
BOOL InitAppClass() //реализация оконного интерфейса
{
    ATOM class_id;
    WNDCLASS wc;
    memset(&wc, 0, sizeof(wc));
    wc.lpszMenuName = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = g_hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszClassName = L"LabWork1";
    class_id = RegisterClass(&wc);
 
    if (class_id != 0)
        return TRUE;
 
    return FALSE;
}
 
BOOL InitWindow()
{
    g_mainWnd = CreateWindow(L"labWork1", L"Лабораторная работа №1",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        400, 400,
        0, 0,
        g_hInstance,
        0);
    if (!g_mainWnd) return FALSE;
    ShowWindow(g_mainWnd, g_nCmdShow);
    UpdateWindow(g_mainWnd);
 
    return TRUE;
}
 
void OnIdle()
{
    DWORD cur_time = GetTickCount();
    DWORD delta_time = cur_time - prev_frame_time;
    balls.Move(delta_time);
    prev_frame_time = cur_time;
    InvalidateRect(g_mainWnd, NULL, TRUE);
}
 
WPARAM StartMessageLoop()
{
    MSG msg;
    while (1)
    {
        if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                break;
            DispatchMessage(&msg);
        }
        else
        {
            Sleep(20);
            OnIdle();
        }
    }
    return msg.wParam;
}
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_DESTROY:
    {
        PostQuitMessage(0);
        return 0;
    }
    default:
        break;
 
    case WM_PAINT:
    {
        HDC hDC;
        PAINTSTRUCT ps;
        hDC = BeginPaint(hWnd, &ps);
        balls.Draw(hDC);
        monitor.Draw(hDC);
        EndPaint(hWnd, &ps);
        return 0;
    }
 
    case WM_SIZE: //изменение размера окна
    {
        //RECT rect_wndSize;
        rect_wndSize.top = 0;
        rect_wndSize.left = 0;
        rect_wndSize.bottom = HIWORD(lParam);
        rect_wndSize.right = LOWORD(lParam);
        balls.SetBounds(rect_wndSize);
        return 0;
    }
    case WM_LBUTTONUP:
    {
        double xpos = GET_X_LPARAM(lParam);
        double ypos = GET_Y_LPARAM(lParam);
        CBall* ball = balls.Add();
        if (ball != NULL)
        {
            double v_x, v_y;
            monitor.GetVXVY(v_x, v_y);
            ball->SetParams(xpos, ypos, 2, v_x, v_y, rect_wndSize);
        }
        return 0;
    }
    case WM_RBUTTONUP:
    {
        double xpos = GET_X_LPARAM(lParam);
        double ypos = GET_Y_LPARAM(lParam);
        CColoredBall* ball = balls.AddColoredBall();
        if (ball != NULL)
        {
            double v_x, v_y;
            monitor.GetVXVY(v_x, v_y);
            ball->SetParams(xpos, ypos, 2, v_x, v_y, rect_wndSize);
            ball->SetColor(255, 5, 255);
        }
        return 0;
    }
 
    case WM_KEYDOWN:
    {
        switch (wParam)
        {
        case VK_DOWN:
            monitor.SpeedDown();
            return 0;
        case VK_UP:
            monitor.SpeedUp();
            return 0;
        case VK_LEFT:
            monitor.AngleUp();
            return 0;
        case VK_RIGHT:
            monitor.AngleDown();
            return 0;
        }
    }
    break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
 
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprevinstance, LPSTR lpCmdline, int nCmdshow) //главная функция 
{
    prev_frame_time = GetTickCount();
 
    CBall* ball;
    ball = balls.Add();
    ball->SetParams(10, 10, 2, 50, 50, rect_wndSize);
    ball = balls.Add();
    ball->SetParams(100, 10, 2, -70, -70, rect_wndSize);
 
 
    g_hInstance = hInstance;
    g_nCmdShow = nCmdshow;
 
    if (!InitAppClass())
        return 0;
    if (!InitWindow())
        return 0;
 
    RECT cr;
    GetClientRect(g_mainWnd, &cr);
    //b1.SetBounds(cr);
    //b1.SetHLimiter(&h1);
    //b1.SetHLimiters(&h2);
 
    return StartMessageLoop();
}

Ошибки которые выдает

1. "" Severity Code Description Project File Line Suppression State
Error LNK2005 "public: virtual void __thiscall CBall::SetParams(double,double,double,do uble,double,struct tagRECT)" (?SetParams@CBall@@UAEXNNNNNUtagRECT@@@Z ) already defined in CBall.obj LabWork2""

2. "" Severity Code Description Project File Line Suppression State
Error LNK1169 one or more multiply defined symbols found LabWork2 ""


Перешел на версию 2015 потому что при компиляции на версии 2012, в программе не окрашивались шарики.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2018, 11:17
Ответы с готовыми решениями:

Ошибка при переходе на server manager в windows 2012
Добрый вечер. При переходе на server manager в windows 2012 выходит такое окно и Доступа к server manager нет. Как можно восстановить?

Visual Studio 2012 Ошибка при компиляции программы
Здравствуйте. Возникла проблема при компиляции данной программы: #include &quot;stdafx.h&quot; #include &quot;string&quot; #include...

Ошибка при компиляции игры в Visual Studio 2015
Столкнулся с проблемой при компиляции моей игры на Unrial Engine 4.11.2 в Visual Studio 2015. При выборе компилятора Dubug Game, Shipping...

6
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
25.05.2018, 11:27
Читать разучились чтоли? Написано ведь что функция CBall::SetParams определена более 1 раза...
0
0 / 0 / 0
Регистрация: 25.05.2018
Сообщений: 7
25.05.2018, 11:30  [ТС]
А как это исправить?

Добавлено через 1 минуту
Цитата Сообщение от Someone007 Посмотреть сообщение
Читать разучились чтоли? Написано ведь что функция CBall::SetParams определена более 1 раза...
Someone007, А как это исправить?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
25.05.2018, 11:30
Цитата Сообщение от khrpnv Посмотреть сообщение
А как это исправить?
Очевидно же, что удалить лишнее...
0
0 / 0 / 0
Регистрация: 25.05.2018
Сообщений: 7
25.05.2018, 11:34  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Очевидно же, что удалить лишнее...
Someone007, Спасибо, а можете подсказать почему не окрашиваются шары, класс который за это отвечает CColoreBall, в главной функции это реализовано через нажатие на правую кнопку мыши. В чем может быть проблема?
0
2732 / 887 / 330
Регистрация: 10.02.2018
Сообщений: 2,095
25.05.2018, 12:31
Лучший ответ Сообщение было отмечено khrpnv как решение

Решение

Цитата Сообщение от khrpnv Посмотреть сообщение
В чем может быть проблема?
Функция базового класса Draw не виртуальная. От версии студии это не зависит
По ошибке линкера, возможно какие-то служебные файлы от старой студии мешают компиляции в новой, попробуйте почистить свой проект от всех лишних файлов и запустите ребилд.
1
0 / 0 / 0
Регистрация: 25.05.2018
Сообщений: 7
25.05.2018, 15:54  [ТС]
Цитата Сообщение от Ygg Посмотреть сообщение
Функция базового класса Draw не виртуальная. От версии студии это не зависит
По ошибке линкера, возможно какие-то служебные файлы от старой студии мешают компиляции в новой, попробуйте почистить свой проект от всех лишних файлов и запустите ребилд.
Ygg, Спасибо большое, помогло!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2018, 15:54
Помогаю со студенческими работами здесь

Ошибки в Visual Studio 2015 при компиляции
Всем здравствуйте. Столкнулся с проблемой при компиляции программы в VS2015. Друг скинул программу, у него нормально запускается и...

Вылетает примерно через 30 минут (при переходе в нет, в стим, или вообще простотак но при переходе)
Здравствуйте у меня windows вылетает на синий экран, внизу появляется отсчет до 100 потом он сам перезагружается! Повторяется раза три в...

Ошибка при переходе на следующую строку при переносе значений из excel в word
Приветствую знатоки vba.. Суть проблемы есть таблица ексель с цифрами и таблица word с объединенными ячейками в которую по закладке...

VS 2012/2010 LINK : fatal error LNK1181 при компиляции
В один день студия на стационарнике и на ноутубуке перестала собирать все c++ проекты (и новые созданные в ней в том числе) ссылаясь на...

Ошибка памяти при выполнении, при компиляции не выводит ошибки
ПОмогите плс программа вводит строку символов до точки, а после вычисляет процент согласных в этой строке и выводит их в обратном порядке....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru