Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 20:15   #1
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
Печаль ошибка перекрестная инициализация

помогите исправить
немогу найти причину ошибки более того никогда такое не встречал если можно покажите где ошибка и объясните почему это ошибка).
Вот код
Код:
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
        {
                 HDC hDC;
                 PAINTSTRUCT ps;
                 RECT rect;   
                 int userReply;
                      switch (uMsg)
                        {
                              case WM_PAINT:
                               hDC = BeginPaint(hWnd ,&ps);
                               SetBkMode(hDC,TRANSPARENT);
                               GetClientRect(hWnd, &rect);
                               DrawText(hDC,"Hello , World",-1,&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
                               POINT ptt[5] = {{100,100},{200,100},{200,200},{100,200},{100,100}};
                               MoveToEx(hDC,ptt[0].x,ptt[0].y, NULL);
                               for(int i = 0; i<5;++i) LineTo(hDC,ptt[i].x, ptt[i].y);
                               EndPaint(hWnd,&ps);
                              break;
                              case WM_CLOSE:
                               userReply = MessageBox(hWnd,"Ви впевнені що хочете закрити вікно?","",MB_YESNO | MB_ICONQUESTION);
                               if(IDYES==userReply)
                                DestroyWindow(hWnd);
                              
                              break;
                              case WM_KEYDOWN:
                               PostQuitMessage(0);
                              break;
                              case WM_DESTROY:
                                PostQuitMessage(0);
                                break;
                              case WM_CREATE:
                                SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(200,160,225)));
                              break;   
                         default:
                                 return DefWindowProc(hWnd,uMsg,wParam, lParam);
                         }
                 return 0;
        }
Ошибка появилась при добавлении этой строки
Код:
 
  POINT ptt [5] = ((100,100), (200,100), (200,200), (100,200), (100,100)); 
                               MoveToEx (hDC, ptt [0]. X, ptt [0]. Y, NULL); 
                               for (int i = 0; i <5; + + i) LineTo (hDC, ptt [i]. x, ptt [i]. y);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Код:
29 C:\sTd\Hello_2.cpp   crosses initialization of `POINT ptt[5]' 
49 C:\sTd\Hello_2.cpp jump to case label

Последний раз редактировалось Carbon; 22.03.2010 в 20:20.
rUs_LAN вне форума Ответить с цитированием
Старый 22.03.2010, 22:18   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
Сообщение

Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 HDC hDC;
 PAINTSTRUCT ps;
 RECT rect;   
 POINT ptt[5] = {{100,100},{200,100},{200,200},{100,200},{100,100}};
 int userReply;
 switch (uMsg)
 {
  case WM_PAINT:
    hDC = BeginPaint(hWnd ,&ps);
    SetBkMode(hDC,TRANSPARENT);
    GetClientRect(hWnd, &rect);
    DrawText(hDC,(LPCWSTR)L"Hello",-1,&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    MoveToEx(hDC,ptt[0].x,ptt[0].y, NULL);
    for(int i = 0; i<5;++i) LineTo(hDC,ptt[i].x, ptt[i].y);
    EndPaint(hWnd,&ps);
  break;
  case WM_CLOSE:
    userReply = MessageBox(hWnd, (LPCWSTR)L"xxx", LPCWSTR)L"",MB_YESNO | MB_ICONQUESTION);
    if(IDYES==userReply)
       DestroyWindow(hWnd);
  break;
  case WM_KEYDOWN:
    PostQuitMessage(0);
  break;
  case WM_DESTROY:
    PostQuitMessage(0);
  break;
  case WM_CREATE:
     SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(200,160,225)));
  break;   
  default:
    return DefWindowProc(hWnd,uMsg,wParam, lParam);
}
return 0;
}
Странно, я почему-то полагал, что высокоуровневый компилятор должен позволять объявить и инициализировать переменную в любом месте. Я так понимаю, что ему не понравилось, что вы локальную переменную проинициализировали в конструкции switch->case.

У меня студия, кстати, по другому выругалась.
Цитата:
1>.\temp.cpp(153) : error C2360: initialization of 'ptt' is skipped by 'case' label
1> .\temp.cpp(148) : see declaration of 'ptt'
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 22.03.2010, 22:44   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию втф

У меня такая ошибка появляется когда заменить "{" на "(" Если перенести код с case в начало функции код запускается но... короче все видно на принскрине. P.S. пользуюсь Dec C++

___________________________________ ________________________________
понял! я не те скобки имел в виду там просто в { } надо было взять тот код
Изображения
Тип файла: jpg wtf.JPG (213.4 Кб, 135 просмотров)

Последний раз редактировалось rUs_LAN; 22.03.2010 в 22:50. Причина: УрАААААА
rUs_LAN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка инициализация Krumyura Общие вопросы C/C++ 2 22.03.2010 14:08
Инициализация Krumyura Общие вопросы C/C++ 5 20.03.2010 23:37
Инициализация DirectX Pedro Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 30.09.2009 21:06
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36
Инициализация окна Anny Общие вопросы Delphi 9 13.03.2007 11:48