对类成员的静态函数访问
Static function access to class member
class Header:
#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)
与我如何在静态函数中引用静态变量有关。如果我不把角声明为static float angle
那么我当然不能通过static void OnRender()
来访问它。我必须补充更多的细节。如果我不将它声明为静态,就会得到这个错误illegal reference to non-static member App::angle
在源文件App.cpp
中,您需要定义您的静态变量:
static float App::angle = 0; //0 is my test default value. use yours
,如果你想在非静态方法中使用angle
,你可能想要使用App:angle
的类实例。例如:
App::App() {
App::angle = 0.0f;
}
相关文章:
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- C++无法访问或使用静态函数
- 从静态成员函数访问私有非静态类变量 - C++
- 非静态函数可以访问静态变量吗?
- 使用C 中的共享_ptr从公共静态成员函数访问私有构造函数
- 使用静态成员函数访问静态数据成员
- 静态模板函数访问静态类成员
- 在执行 SFINAE 时访问模板派生类 (CRTP) 的静态函数时类型不完整
- 静态成员函数访问静态私有变量时的链接器错误
- 为什么我无法访问静态函数中的私有构造函数,如下所示?
- 如何从不同类的静态成员函数访问非静态Qt-Ui函数
- 可以静态访问全局静态变量的静态函数
- 从静态函数访问非静态结构
- 从静态函数C++访问静态变量
- 如何从静态函数访问成员变量
- c++中的静态函数访问
- 对类成员的静态函数访问
- 从同一类的专门化模板的静态函数访问类模板成员
- 可以从派生类中的静态函数访问基类受保护的成员吗?
- 如何从同一个类的静态函数访问类的私有成员