我有一个接口,但我不能使用它,因为方法应该是静态的。或者另一个解决方案..。据我所见,它们不可能是静止的.
定义了它使用的函数的图形库:
GraphicsLibrary.h
virtual void drawText(const std::string& text, const Point& pt, unsigned char r, unsigned char g, unsigned char b);这里要说明的是,OpenGL是从GraphicsLibrary派生出来的:
OpenGL.h
class OpenGL : public GraphicsLibraryOpenGL.cpp使用来自GraphicsLibrary的虚拟函数,并在括号中“做”事情:
OpenGL.cpp
void GraphicsLibrary::drawText(const std::string& text, const Point &pt, unsigned char r, unsigned char g, unsigned char b)
{
//does things
}我主要是用这个方法..。但它给出了一个错误
MyMain
OpenGL::drawText(toString(mousePos_world), drawPosition, 255, 0, 0);错误:非静态成员引用必须相对于特定对象。
我该如何解决这个问题?我读到我应该把这个函数变成静态的,但是我觉得我不能.对吗?或者大多数人会说,想想为什么要用其他类的方法来构造类,但这是因为我有一个接口…!
发布于 2013-03-04 15:42:53
您需要创建一个OpenGL类的实例:
OpenGL ogl;
ogl.drawText(...);函数drawText是类的成员函数,这意味着必须对该类的对象调用它。对象是特定类的实例。
然后,在这个对象上,您可以调用函数。
如果您不希望创建一个实例,那么您应该使您的函数static,您可以这样调用它:OpenGL::drawText(...);
发布于 2013-03-04 15:43:10
您只需要一个OpenGL实例就可以调用它。具体而言,如何做到这一点取决于尚未给出的关于OpenGL的信息,但如下所示:
OpenGL gl;
gl.drawText(toString(mousePos_world), drawPosition, 255, 0, 0);您试图调用drawText,就好像它是一个静态成员函数(使用::)。因为drawText不是静态的,所以需要一个对象来调用它。
发布于 2013-03-04 15:43:31
您应该创建图形库对象。
std::unique_ptr<GraphicsLibrary> pGL(new OpenGL); //or shared_ptr
pGL->drawText(...);https://stackoverflow.com/questions/15205302
复制相似问题