2

私はインターフェースを持っていますが、メソッドは静的でなければならないのでそれを使用できません..または別の解決策...私が見る限り、それらは静的ではありません...:

使用する関数の定義を持つグラフィックライブラリ:

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

エラー:非静的メンバー参照は特定のオブジェクトに関連している必要があります


この問題をどのように修正する必要がありますか?関数を静的にする必要があると読みましたが、できないと思いました...そうですか?または、ほとんどの人は、他のクラスのメソッドを使用しているのに、なぜこのようにクラスを構築したのか考えてみてください。しかし、それは私がインターフェースを持っているからです...!

4

3 に答える 3

4

OpenGLクラスのインスタンスを作成する必要があります。

OpenGL ogl;
ogl.drawText(...);

関数drawTextはクラスのメンバー関数です。つまり、そのクラスのオブジェクトで呼び出す必要があります。オブジェクトは特定のクラスのインスタンスです。

次に、そのオブジェクトで関数を呼び出すことができます。

インスタンスを作成したくない場合は、次のstaticように呼び出すことができる 関数を作成する必要があります。OpenGL::drawText(...);

于 2013-03-04T15:42:53.577 に答える
1

OpenGLを呼び出すには、のインスタンスが必要です。具体的には、それをどのように行うかは、提供していない情報によって異なりますOpenGLが、次のようになります。

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

drawText静的メンバー関数であるかのように(を使用して)呼び出そうとしました::。は静的ではないためdrawText、呼び出すオブジェクトが必要です。

于 2013-03-04T15:43:10.213 に答える
0

グラフィックライブラリオブジェクトを作成する必要があります。

std::unique_ptr<GraphicsLibrary> pGL(new OpenGL); //or shared_ptr
pGL->drawText(...);
于 2013-03-04T15:43:31.823 に答える