2010-11-18 51 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: 
    ..... 
}; 

...或(目前最壞的選擇),使他們全球職能。