C++ C++;接口错误,非静态成员引用必须相对于特定对象

C++ C++;接口错误,非静态成员引用必须相对于特定对象,c++,interface,C++,Interface,我有一个接口,但我不能使用它,因为方法应该是静态的。。或者另一个解决方案。。。在我看来,它们不可能是静态的…: 具有所用函数定义的图形库: GraphicsLibrary.h virtual void drawText(const std::string& text, const Point& pt, unsigned char r, unsigned char g, unsigned char b); 这里只想说明一下,从GraphicsLibrary派生的OpenG

我有一个接口,但我不能使用它,因为方法应该是静态的。。或者另一个解决方案。。。在我看来,它们不可能是静态的…:

具有所用函数定义的图形库:

GraphicsLibrary.h
    virtual void drawText(const std::string& text, const Point& pt, unsigned char r, unsigned char g, unsigned char b);
这里只想说明一下,从GraphicsLibrary派生的OpenGL:

OpenGL.h
class OpenGL : public GraphicsLibrary
OpenGL.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);
错误:非静态成员引用必须相对于特定对象



我应该如何解决这个问题?我读到我应该使函数静态,但我认为我不能。。。正确的?或者大多数人会说,想想你为什么这样构造类,你在使用其他类的方法,但那是因为我有一个接口

您需要创建
OpenGL
类的实例:

OpenGL ogl;
ogl.drawText(...);
您的函数
drawText
是该类的成员函数,这意味着必须对该类的对象调用它。对象是特定类的实例

然后在该对象上可以调用函数


如果您不希望创建实例,那么应该将函数
设置为静态的
,您可以这样调用它:
OpenGL::drawText(…)

您只需要一个
OpenGL
实例来调用它。具体地说,您如何做到这一点取决于您尚未提供的有关
OpenGL
的信息,但它看起来是这样的:

OpenGL gl;
gl.drawText(toString(mousePos_world), drawPosition, 255, 0, 0);

您试图调用
drawText
,就好像它是一个静态成员函数一样(使用
)。由于
drawText
不是静态的,因此需要一个对象来调用它。

您应该创建图形库对象

std::unique_ptr<GraphicsLibrary> pGL(new OpenGL); //or shared_ptr
pGL->drawText(...);
std::unique_ptr pGL(新OpenGL)//或共享\u ptr
pGL->drawText(…);