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

ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken - C++

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
11.07.2013, 14:22     ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken #1
C++
1
    wc.lpfnWndProc      = WndProc;
[BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken
Full parser context
windowp.cpp(191): parsing: unsigned long (__stdcall *)(void *) CwindowP::WINDOWP(void *)


переменная указывает на функцию класса, так делать нельзя?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 14:22     ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken
Посмотрите здесь:

[C++ Error] Sqrt x.cpp(16): E2268 Call to undefined function 'sqrt'. Что это за ошибка??? C++
C++ C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
C++ Выдаёт ошибку во второй сточке: [BCC32 Error] File1.cpp(40): E2089 Identifier 'addFirst' cannot have a type qualifier
[C++ Error] Unit1.cpp(130): E2121 Function call missing ) C++
C++ C:\tsserver\Projects\cpp\codeblocks\MyComp\compiler\mmz\TArr ay.hpp|140|error: 'numeric_limits' is not a member of 'std'|
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11816 / 6795 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
11.07.2013, 14:30     ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken #2
Цитата Сообщение от Van111 Посмотреть сообщение
так делать нельзя?
Функции-члены класса имеют неявный параметр (this)

WinApi: CALLBACK WndProc
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
11.07.2013, 18:40  [ТС]     ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken #3
у меня при вервом обращение к компоненту класа вылетает ошибка
Кликните здесь для просмотра всего текста
C++
1
2
3
4
CwindowP::CwindowP(HINSTANCE hInstance)
{
    WINDOWP( hInstance);
}

Кликните здесь для просмотра всего текста
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
LRESULT CALLBACK CwindowP::WndProc(
                HWND    hWnd,
                UINT    message,
                WPARAM  wParam,
                LPARAM  lParam)
{
    RECT    Screen;     // используется позднее для размеров окна
    GLuint  PixelFormat;
    static  PIXELFORMATDESCRIPTOR pfd=
    {
        sizeof(PIXELFORMATDESCRIPTOR)// Размер этой структуры
        1,              // Номер версии (?)
        PFD_DRAW_TO_WINDOW |// Формат для Окна
        PFD_SUPPORT_OPENGL |// Формат для OpenGL
        PFD_DOUBLEBUFFER,// Формат для двойного буфера
        PFD_TYPE_RGBA,  // Требуется RGBA формат
        16,             // Выбор 16 бит глубины цвета
        0, 0, 0, 0, 0, 0,// Игнорирование цветовых битов (?)
        0,              // нет буфера прозрачности
        0,              // Сдвиговый бит игнорируется (?)
        0,              // Нет буфера аккумуляции
        0, 0, 0, 0,     // Биты аккумуляции игнорируются (?)
        16,             // 16 битный Z-буфер (буфер глубины)
        0,              // Нет буфера траффарета
        0,              // Нет вспомогательных буферов (?)
        PFD_MAIN_PLANE, // Главный слой рисования
        0,              // Резерв (?)
        0, 0, 0         // Маски слоя игнорируются (?)
    };
    switch (message)    // Тип сообщения
    {
        case WM_CREATE:
        this->hDC = GetDC(hWnd);    // Получить контекст устройства для окна
        PixelFormat = ChoosePixelFormat(hDC, &pfd);
            // Найти ближайшее совпадение для нашего формата пикселов
        if (!PixelFormat)
        {
            MessageBoxA(0,"Can't Find A Suitable PixelFormat.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            // Это сообщение говорит, что программа должна завершится
            break;  // Предтовращение повтора кода
        }
        if(!SetPixelFormat(hDC,PixelFormat,&pfd))
        {
            MessageBoxA(0,"Can't Set The PixelFormat.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
        hRC = wglCreateContext(hDC);
        if(!hRC)
        {
            MessageBoxA(0,"Can't Create A GL Rendering Context.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
        if(!wglMakeCurrent(hDC, hRC))
        {
            MessageBoxA(0,"Can't activate GLRC.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
        GetClientRect(hWnd, &Screen);
        InitGL(Screen.right, Screen.bottom);
        BuildFont();
        break;
 
        case WM_DESTROY:
        case WM_CLOSE:
        ChangeDisplaySettings(NULL, 0);
 
        wglMakeCurrent(hDC,NULL);
        wglDeleteContext(hRC);
        ReleaseDC(hWnd,hDC);
        KillFont();
        PostQuitMessage(0);
        break;
 
        case WM_KEYDOWN:
        keys[wParam] = TRUE;
        break;
 
        case WM_KEYUP:
        keys[wParam] = FALSE;
        break;
 
        case WM_SIZE:
        ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
        break;
 
        case WM_MBUTTONDOWN:
        mouse_click_middle = true;
        GetCursorPos(&mouse_position_last);
        break;
 
        case WM_MBUTTONUP:
        mouse_click_middle = false;
        break;
 
        case WM_MOUSEMOVE:
        if (mouse_click_middle)
        {
            GetCursorPos(&mouse_position);
            CameraViev::y -=  (mouse_position.x - mouse_position_last.x) * CameraViev::speed_rotate_angle;
            CameraViev::x +=  (mouse_position.y - mouse_position_last.y) * CameraViev::speed_rotate_angle;
            memcpy(&mouse_position_last,&mouse_position,sizeof(POINT));
        }
        break;
 
        case WM_MOUSEWHEEL:
        float wheelDelta;
        wheelDelta= GET_WHEEL_DELTA_WPARAM(wParam);
        if (mouse_click_middle)
            CameraViev::z +=  wheelDelta * CameraViev::speed_rotate_angle;
        else
            CameraViev::zoom += wheelDelta * CameraViev::speed_zoom;
        break;
 
        default:
    return (DefWindowProc(hWnd, message, wParam, lParam));
    }
    return (0);
}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
inline static LRESULT CALLBACK CwindowP::mainwindowproc_pseudo(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)
{
    return wndlist.find(hWnd)->second->WndProc(hWnd, message, wParam, lParam);
}

Кликните здесь для просмотра всего текста
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
LPTHREAD_START_ROUTINE CwindowP::WINDOWP (  LPVOID lpThreadParameter)
{
    InitGL();
 
    HINSTANCE hInstance = (HINSTANCE)lpThreadParameter;
    MSG     msg;    // Структура сообщения Windows
    WNDCLASS    wc; // Структура класса Windows для установки типа окна
    HWND        hWnd;// Сохранение дискриптора окна
    wndlist[hWnd] = this;
 
    wc.style            = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc.lpfnWndProc      = mainwindowproc_pseudo;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = NULL;
    wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground    = NULL;
    wc.lpszMenuName     = NULL;
    wc.lpszClassName    = "OpenGL WinClass";
 
    if(!RegisterClass(&wc))
    {
    MessageBoxA(0,"Failed To Register The Window Class.","Error",MB_OK|MB_ICONERROR);
    return FALSE;
    }
 
    hWnd = CreateWindowA(
    "OpenGL WinClass",
    "Jeff Molofee's GL Code Tutorial ... NeHe '99", // Заголовок вверху окна
 
    WS_POPUP |
    WS_CLIPCHILDREN |
    WS_CLIPSIBLINGS,
 
    0, 0,           // Позиция окна на экране
    1280, 1024,     // Ширина и высота окна
 
    NULL,
    NULL,
    hInstance,
    NULL);
 
    if(!hWnd)
    {
    MessageBoxA(0,"Window Creation Error.","Error",MB_OK|MB_ICONERROR);
        return FALSE;
    }
 
    DEVMODE dmScreenSettings;           // Режим работы
 
    memset(&dmScreenSettings, 0, sizeof(DEVMODE));  // Очистка для хранения установок
    dmScreenSettings.dmSize = sizeof(DEVMODE);      // Размер структуры Devmode
    dmScreenSettings.dmPelsWidth    = 1280;         // Ширина экрана
    dmScreenSettings.dmPelsHeight   = 1024;         // Высота экрана
    dmScreenSettings.dmFields   = DM_PELSWIDTH | DM_PELSHEIGHT; // Режим Пиксела
    ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
    // Переключение в полный экран
 
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
    SetFocus(hWnd);
    //SetTimer(hWnd,0, frame_rate,(TIMERPROC)&FDraw);
 
 
    while (1)
    {
        // Обработка всех сообщений
        while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
        {
            if (GetMessage(&msg, NULL, 0, 0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                return (LPTHREAD_START_ROUTINE)TRUE;
            }
        }
 
        //DrawGLScene();                // Нарисовать сцену
        //SwapBuffers(hDC);         // Переключить буфер экрана
        if (keys[VK_ESCAPE]) SendMessage(hWnd,WM_CLOSE,0,0);    // Если ESC - выйти
    }
}
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
13.07.2013, 10:34  [ТС]     ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken #4
C++
1
2
3
4
5
    static std::map<HWND,CwindowP*> wndlist;
LRESULT CALLBACK mainwindowproc_pseudo(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)
{
    return wndlist.find(hWnd)->second->WndProc(hWnd, message, wParam, lParam);
}
это в cpp файле. почему вылетает? при обращении к переменной класса программа вылетает
вот этот кусок
C++
1
2
3
4
    switch (message)    // Тип сообщения
    {
        case WM_CREATE:
        hDC = GetDC(hWnd);  // Получить контекст устройства для окна
Yandex
Объявления
13.07.2013, 10:34     ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken
Ответ Создать тему
Опции темы

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