1

クラス ヘッダー:

#ifndef _APP_H_
#define _APP_H_

#include "glut.h"
#include "Declare.h"


class App {
private:
    static float angle; 

public:

    App();
    int OnExecute();
    void OnLoop();
    static void OnRender();
    bool OnInit();
    void OnCleanup();
    static void OnResize(int w, int h);


};


#endif

私の OnRender の定義は

#include "App.h"

App::App() {
    angle = 0.0f;
}

void App::OnRender() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    gluLookAt( 0.0f, 0.0f, 10.0f,
               0.0f, 0.0f, 0.0f,
               0.0f, 1.0f, 0.0f);
    glRotatef(angle, 0.0f, 1.0f, 0.0f);

    glBegin(GL_TRIANGLES);
        glVertex3f(-2.0f,-2.0f,0.0f);
        glVertex3f(2.0f,0.0f,0.0f);
        glVertex3f(0.0f,2.0f,0.0f);
    glEnd();

    angle+=0.1f;

    glutSwapBuffers();
}

エラー:

1>App.obj : error LNK2001: unresolved external symbol "private: static float App::angle" (?angle@App@@0MA)
1>App_OnRender.obj : error LNK2019: unresolved external symbol "private: static float App::angle" (?angle@App@@0MA) referenced in function "public: static void __cdecl App::OnRender(void)" (?OnRender@App@@SAXXZ)

静的関数内の静的変数を参照する方法に関係があります。angle を宣言しないstatic float angleと、確かに 経由でアクセスできませんstatic void OnRender()。詳細を追加する必要があります。静的として宣言しないと、このエラーが発生しますillegal reference to non-static member App::angle

4

1 に答える 1

3

ソース ファイルでは、静的変数を定義するApp.cpp必要があります。

static float App::angle = 0; //0 is my test default value. use yours

angle非静的メソッドで使用する場合は、クラス インスタンスをApp:angle. 例えば ​​:

App::App() {
    App::angle = 0.0f;
}
于 2013-05-29T14:14:23.347 に答える