Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс, передача функции 
V
    Опции темы
Maka6er
  Дата 2.12.2007, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: нет
Всего: 3



Пытаюсь создать класс рисующий некоторую картинку:
Код

class draw
{
private:
    GLint Width,Height;
public:
    draw();
    void CALLBACK resize(int width,int height);
    void CALLBACK display(void);
    void drawTop(int x,int y,float radius = 0.12);
    void drawGroundLine(int x1,int y1,int x2,int y2);
    void drawSatelliteLine(int x1,int y1,int x2,int y2);
};


При реализации функции прорисовки возникает ошибка:
Код

draw::draw()
{
    Width = Height = 768;

    auxInitPosition( 50, 10, Width, Height);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( _T("Test") );
    auxReshapeFunc(resize); //Error 1
    auxMainLoop(display); //Error 2
}


Error 1 error C3867: 'draw::resize': function call missing argument list; use '&draw::resize' to create a pointer to member

Вторая ошибка аналогична. 

Если подставляю auxReshapeFunc(&draw::resize); возникает:
Error 1    error C2664: 'auxReshapeFunc' : cannot convert parameter 1 from 'void (__stdcall draw::* )(int,int)' to 'AUXRESHAPEPROC'    

Подскажите пожалуйста как правильно передать эти функции?

Функция реализована вот так:

Код

void CALLBACK draw::resize(int width,int height)
 {
    glViewport(0,0,width,height);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho(-8,8, -8,8, 2,12);
    gluLookAt( 0,0,4, 0,0,0, 0,1,0 );
    glMatrixMode( GL_MODELVIEW );
 }

PM MAIL   Вверх
baldina
Дата 6.12.2007, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



так просто не выйдет:  в функции члены класса первым (неявным) параметром передается адрес объекта, для которого вызывается.
так что надо либо сделать их статическими (не зависящими от объекта) либо - не членами класса.
например так:
Код

class draw
{
private:
    static GLint Width,Height;
public:
    draw();
    static void CALLBACK resize(int width,int height);
    static void CALLBACK display(void);
    void drawTop(int x,int y,float radius = 0.12);
    void drawGroundLine(int x1,int y1,int x2,int y2);
    void drawSatelliteLine(int x1,int y1,int x2,int y2);
};


PM MAIL   Вверх
Maka6er
Дата 23.1.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: нет
Всего: 3



Спасибо за ответ. Извините, что не ответил, помогло ли. Вопрос отпал, так как отпала необходимость писать программу smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.