所以,我最初试图做一些基本的OpenGL(免费)的东西在c++中,但我遇到了一个障碍。我得到以下错误:
.../TextureMapper.cpp: In member function 'void TextureMapper::run()':
.../TextureMapper.cpp:67:28: error: cannot convert 'TextureMapper::display' from type 'void* (TextureMapper::)()' to type 'void (*)()'
glutDisplayFunc(display);
^
我认为我需要display
是一个函数指针(或者不管它叫什么,我不太熟悉这个概念)。然而,我做错了。我以前从未使用过函数指针,不幸的是,错误消息对我来说没有任何意义,而且我无法理解我所阅读的文档。我是一个Java程序员,所以这一切对我来说都很陌生。
下面是TextureMapper.h
中成员函数的声明:
void* display(void);
和TextureMapper.cpp
中的实例化(也不记得这叫什么了):
void* TextureMapper::display(void)
{
...
}
我注意到cllion给了我一个关于这种类型的警告,但我也先试了这个:
void display();
但是它给出了一个类似的错误。
这里是我试图调用glutDisplayFunc
的地方:
void TextureMapper::run()
{
/* Run GL */
glutDisplayFunc(display);
glutMainLoop();
}
glutDisplayFunc
需要一个C函数指针。这个指针不能来自于非静态成员函数,因为在c++中,成员函数是乱码的。
因此,为了能够使此工作,一个解决方案是将TextureMapper::Display
定义为静态成员函数。
那么,试试这样写:
class TextureMapper
{
public:
static void display(void);
....
};
and in texturemapper.cpp
void TextureMapper::display(void) { * implementation here *}