2010-10-15 14 views
1

我正在使用計時器功能進行動畫製作,但我在將它放入Renderer類時遇到了問題。glutTimerFunc問題

void Renderer::animate(int value) 
{ 
glutTimerFunc(TIMERMSECS, animate, 0); 
} 

錯誤: \ renderer.cpp(242):錯誤C3867: '渲染動畫::':函數調用缺少參數列表;使用「&渲染::有生」來創建一個指針構件

回答

1

glutTimerFunc()需要一個指向型void (*func)(int value),不void (Renderer::*func)(int value)類型的成員函數的函數。

使Render::animate爲靜態或使用全局函數。

2

問題是Renderer::animate是一個類成員函數,因此有一個隱藏的this參數。 glutTimerFunc不知道要傳遞什麼值this,所以如果您以某種方式嘗試用惡意轉換偷偷摸摸地通過編譯器,它會在運行時崩潰。

解決方法是將Renderer::animate更改爲靜態方法或普通的全局函數。然後,您需要將指針存儲到您的Renderer例如在一個全局變量,如:

class Renderer 
{ 
    static void staticAnimate(int value); 
    void animate(int value); 
    ... 
}; 
Renderer *gRenderer = ...; 

void Renderer::staticAnimate(int value) 
{ 
    gRenderer->animate(value); 
} 

... 

glutTimerFunc(TIMERMSECS, &Renderer::staticAnimate, 0); 

如果sizeof(void*) <= sizeof(int)(32位系統,真實的,但在64位系統上不正確的),那麼你也可以通過通過value參數實例;但是,由於這不是可移植的,因此您不需要同時在多個不同的實例上調用glutTimerFunc,您不必擔心爲此使用全局變量。

+0

爲gRenderer即時得到這個 - > 錯誤C2227:左「 - >動畫」必須指向類/結構/聯合/通用型 錯誤C2227:左「 - >動畫」必須指向類/結構/聯合/泛型類型 – Aero 2010-10-15 07:10:11