我有一个问题,通常我会理解为什么会发生这种情况,我没有在main方法中声明该函数。但是这个类本身包含.h文件,它有这个方法的原型,所以我有点迷失为什么它不在main函数的范围内。
using namespace std;
#include "Solar.h"
int main(){
initializeGL();
Stars *Alpha = new Stars(5.0);
Planets *Awe = new Planets(.6,2,30,"Awe",0.0,0.0,0.0);
paintGL();
return 0;
}
void Solar::initializeGL(){
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIV
....
}
稍后还有一个函数paintGL(),这里是头文件
class Solar {
public:
void initializeGL();
void resizeGL(int width, int height);
void paintGL();
.....
private:
.....
};
我不是最好用c ++,所以任何帮助都会受到赞赏。
这里是错误
Solar.cpp:4: error: declaration of âvoid Solar::initializeGL()â outside of class is not definition
Solar.cpp:5: error: declaration of âvoid Solar::paintGL()â outside of class is not definition
Solar.cpp: In function âint main()â:
Solar.cpp:8: error: âinitializeGLâ was not declared in this scope
Solar.cpp:11: error: âpaintGLâ was not declared in this scope
答案 0 :(得分:4)
Solar
是一个类,initializeGL
和paintGL
是成员函数。如果您想使用它们,则必须创建Solar
的实例。
Solar solar;
solar.initializeGL();
// ...more
solar.paintGL();
阅读成员函数:http://msdn.microsoft.com/en-us/library/fk812w4w.aspx
答案 1 :(得分:3)
paintGL()
函数是类Solar
的成员函数。您只能在Solar
类型的对象上调用它:
Solar s;
s.paintGL();
如果你想能够在没有对象的情况下调用它,你应该使它成为自由函数或静态成员函数:
// free
void paintGL();
// static member
class Solar {
public: static void paintGL();
};
这当然仅在paintGL
不使用Solar
...
答案 2 :(得分:2)
这两个函数都是实例函数;你需要实例化一个新的Solar对象并从中调用函数,而不是像你做的那样超出范围
答案 3 :(得分:1)
initializeGL
和paintGL
都是Solar
类的成员函数,但您尝试将它们称为全局函数。那不行。
您需要Solar
的实例:
int main(){
Solar* solar = ... // magic
solar->initializeGL();
Stars *Alpha = new Stars(5.0);
Planets *Awe = new Planets(.6,2,30,"Awe",0.0,0.0,0.0);
solar->paintGL();
...或使函数成为静态成员函数:
class Solar {
public:
static void initializeGL();
void resizeGL(int width, int height);
static void paintGL();
.....
private:
.....
};
...或(迄今为止最差的选项),使它们成为全局函数。