2010-11-18 52 views
0

我有一个问题,通常我会明白为什么会发生这种情况,我没有在main方法中声明函数。但是这个类本身包含了.h文件,该文件具有此方法的原型,所以我对于它不在主函数范围内的原因有点遗憾。功能没有在主要的范围

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++,所以anyhelp将不胜感激。

这里是错误

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

什么是错误信息,它抱怨哪个功能? – 2010-11-18 21:01:45

回答

4

Solar是一个类,并且​​和paintGL是成员函数。如果你想使用它们,你将不得不创建一个Solar的实例。

Solar solar; 
solar.initializeGL(); 
// ...more 
solar.paintGL(); 

上成员函数阅读起来:http://msdn.microsoft.com/en-us/library/fk812w4w.aspx

+0

好吧,这很有意义,谢谢。 – Jim 2010-11-18 21:03:30

2

两个功能实例的功能;你需要实例化一个新的太阳能物体,并从中调用函数,而不是像你所做的那样超出范围

3

paintGL()函数是类Solar的成员函数。你只能把它叫做Solar类型的对象:

Solar s; 
s.paintGL(); 

如果你希望能够调用它没有对象,你要么使它成为一个自由函数或静态成员函数:

// free 
void paintGL(); 

// static member 
class Solar { 
public: static void paintGL(); 
}; 

这当然只是如果paintGL使用的Solar没有数据成员的作品...

1

​​和paintGLSolar类的两个成员函数,但你试试把它们称为全球性功能。这是行不通的。

要么你需要的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: 
    ..... 
}; 

...或(目前最坏的选择),使他们全球职能。