Форум программистов, компьютерный форум CyberForum.ru

левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) - C++

Восстановить пароль Регистрация
 
Skround
Сообщений: n/a
22.09.2013, 19:38     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #1
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
    #include "stdafx.h"
#include "Tic Tac Toe.h"
 
#define MAX_LOADSTRING 100
 
// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
RECT rect;
HBITMAP hbitX, hbitO;
int x, y;
struct Cell // структура для одной ячейки на поле
{
    bool fill;
    int left, top, right, bottom;
    char flag ;
};
int coord [36] = {20,20,145,125,165,20,290,125,310,20,450,125,20,140,145,290,165,140,290,290,310,140,450,290,20,280,145,450,165,280,290,450,310,280,450,450}; //массив координат для вставки битмапа
Cell cells [3][3];
// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
 
    // TODO: разместите код здесь.
    MSG msg;
    HACCEL hAccelTable;
    // Инициализация глобальных строк
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_TICTACTOE, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
    for (int i = 0, z = 0; i<3; i++)
    {
        for(int j=0; j<3 && z < 36; j++)
        {
            cells[i][j].fill=false;
            cells[i][j].left = coord[z++];
            cells[i][j].top = coord[z++];
            cells[i][j].right = coord[z++];
            cells[i][j].bottom = coord[z++];
        }
    }
    // Выполнить инициализацию приложения:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;}
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TICTACTOE));
 
    // Цикл основного сообщения:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return (int) msg.wParam;
}
//  ФУНКЦИЯ: MyRegisterClass()
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TICTACTOE));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_TICTACTOE);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//   КОММЕНТАРИИ:
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
     CW_USEDEFAULT, 0,450 /*CW_USEDEFAULT*/, 450, NULL, NULL, hInstance, NULL); //указать размер окна
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   return TRUE;
}
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//  WM_COMMAND  - обработка меню приложения
//  WM_PAINT    -Закрасить главное окно
//  WM_DESTROY   - ввести сообщение о выходе и вернуться.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    HDC hDC = GetDC(hWnd);
    HDC hMemDC = CreateCompatibleDC(hDC);
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
 
    case WM_LBUTTONDOWN:
        x=LOWORD(lParam);
        y=HIWORD(lParam);
        for (int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                if (x >= cells[i][j].left && x<= cells[i][j].right && y >= cells[i][j].top && y <= cells[i][j].bottom && cells[i][j].fill = false)
                { cells[i][j].flag = 'x';}
            }
        }
        break;
    case WM_RBUTTONDOWN:
        x=LOWORD(lParam);
        y=HIWORD(lParam);
        for (int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                if (x >= cells[i][j].left && x<= cells[i][j].right && y >= cells[i][j].top && y <= cells[i][j].bottom && cells[i][j].fill = false)
                { cells[i][j].flag = 'o';}
            }
        }
        break;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 19:38     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода)
Посмотрите здесь:

C++ Ошибка: Левый операнд должен быть левосторонним значением
C++ Ошибка: левый операнд должен быть левосторонним
Ошибка при ветвлении: левый операнд должен быть левосторонним значением C++
C++ Ошибка: Левый операнд должен быть левосторонним значением
C++ Ошибка: Левый операнд должен быть левосторонним значением
Ошибка: Левый операнд должен быть левосторонним значением C++
Ошибка: левый операнд должен быть левосторонним значением C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 19:51     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #2
Цитата Сообщение от Skround Посмотреть сообщение
левый операнд должен быть левосторонним значением
все правильно) левый операнд должен быть левосторонним значением
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 20:01     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #3
Тут что происходит?
C++
1
if (x >= cells[i][j].left && x<= cells[i][j].right && y >= cells[i][j].top && y <= cells[i][j].bottom && cells[i][j].fill = false)
Добавлено через 1 минуту
Может так:
C++
1
if (x >= cells[i][j].left && x<= cells[i][j].right && y >= cells[i][j].top && y <= cells[i][j].bottom && cells[i][j].fill == false)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12283 / 6970 / 784
Регистрация: 27.09.2012
Сообщений: 17,282
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 20:02     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #4
возьмите в скобки присвоение(если это присвоение, а не сравнение "=="):
C++
1
if (x >= cells[i][j].left && x<= cells[i][j].right && y >= cells[i][j].top && y <= cells[i][j].bottom && ( cells[i][j].fill = false ) )
P.S. посмотрите в таблицу приоритетов операций
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 20:08     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #5
Цитата Сообщение от Croessmah Посмотреть сообщение
если это присвоение, а не сравнение "=="
Скорее всего, сравнение...
Croessmah
22.09.2013, 20:10
  #6

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Скорее всего сравнение
скорее всего
Цитата Сообщение от alsav22 Посмотреть сообщение
присвоение дальше...
присвоение flag, а не fill

alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 20:13     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #7
Цитата Сообщение от Croessmah Посмотреть сообщение
присвоение flag, а не fill
Я понимаю, но с присвоением там смысл теряется. Слишком сложно. И куда, тогда этот && деть:
C++
1
y <= cells[i][j].bottom && cells[i][j].fill = false
Навряд ли...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 20:14     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода)
Еще ссылки по теме:

Исправить ошибку "Левый операнд должен быть левосторонним значением" C++
C++ Левый операнд должен быть левосторонним значением
C++ Левый операнд должен быть левосторонним значением
Операнд * должен быть указателем C++
C++ Функция swap. error C2106: =: левый операнд должен быть левосторонним значением

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12283 / 6970 / 784
Регистрация: 27.09.2012
Сообщений: 17,282
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 20:14     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода) #8
Цитата Сообщение от alsav22 Посмотреть сообщение
И куда, тогда этот && деть:
ну да, бессмысленная вещь получается )))
разве что ленивостью пользоваться, но тогда тело условия смысла не имеет )))
Yandex
Объявления
22.09.2013, 20:14     левый операнд должен быть левосторонним значением (Где показывает что именно в этой части кода)
Ответ Создать тему
Опции темы

Текущее время: 16:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru