2013-10-05 153 views
0

在一個簡單的OpenGL程序我有下面這行:glutKeyboardfunc()回調函數參數

glutKeyboardFunc(keypressed); 

問題是我的「的keyPressed」功能在另一個CPP文件中包含項目。我怎樣才能從我的其他文件調用這個功能?

在main.cpp中:

main() 
{ 
    --- 
    glutKeyboardFunc(keypressed); 
    --- 
} 

在Motion.cpp:

void keypressed(unsigned char key, int x, int y){...} 

事情我嘗試(一切都給編譯錯誤):

glutKeyboardFunc(keypressed); 
glutKeyboardFunc(Motion::keypressed); 
glutKeyboardFunc(&Motion::keypressed); 
glutKeyboardFunc(&keypressed); 

Motion mot; 
glutKeyboardFunc(mot.keypressed); 

有什麼建議? (我使用freeglut.dll如果庫問題的答案)

+0

製作一個具有函數聲明的'Motion.h'文件。 –

回答

1

你需要包括一個函數原型的地方,它會被你的主要C++文件讀取。要做到這一點的一種方法是把這個上面你main功能:

​​

一種常見的方式做,這是有其出口功能也都有一個文件,其中包括所有這些原型每個C++文件功能。然後,當您想要使用在該文件中定義的函數時,可以將該頭文件包含在需要使用該函數的文件頂部。

+0

錯誤LNK2019:在函數_main中引用的無法解析的外部符號「void __cdecl keypressed(unsigned char,int,int)」(?keypressed @@ YAXEHH @ Z) –

+0

@Cagkan:這意味着你的每個源文件都被成功地編譯成了目標文件,但是當它把它們連接成一個可執行文件時,只有你的主目標文件被包含在內。由於您的主要目標文件引用了未包含的其他目標文件,因此會出現未解決的參考錯誤。如何解決這個問題取決於你如何編譯它。 – icktoofay

+0

thx您的有用答案。我不熟悉visual studio C++編譯器:/。我將搜索visual studio的編譯選項。 –