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(…);