2013-10-05 152 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的编译选项。 –