2010-11-18 16 views
0

J'ai un problème, normalement je comprendrais pourquoi cela se produit, je n'ai pas déclaré la fonction dans la méthode principale. Mais la classe elle-même inclut le fichier .h, qui a le prototype de cette méthode, donc je suis un peu perdu sur pourquoi il n'est pas dans le cadre de la fonction principale.Fonction non trouvée dans la portée de la principale

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 
    .... 
} 

Il y a aussi une paintGL fonction() plus tard, et voici le fichier d'en-tête

class Solar { 
public: 
    void initializeGL(); 
    void resizeGL(int width, int height); 
    void paintGL(); 
    ..... 
private: 
    ..... 
}; 

Je ne suis pas le mieux avec C++, donc Anyhelp sera apprécié.

et voici l'erreur

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

Quel est le message d'erreur et sur quelle fonction se plaint-il? –

Répondre

4

Solar est une classe, et initializeGL et paintGL sont des fonctions membres. Si vous souhaitez les utiliser, vous devez créer une instance de Solar.

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

Lire sur les fonctions membres: http://msdn.microsoft.com/en-us/library/fk812w4w.aspx

+0

Ok, et cela a beaucoup de sens, merci. – Jim

2

Les deux fonctions sont des fonctions d'instance; vous devez instancier un nouvel objet Solar et appeler les fonctions de celui-ci, pas hors de portée comme vous l'avez fait

3

La fonction paintGL() est une fonction membre de la classe Solar. Vous ne pouvez appeler sur un objet de type Solar:

Solar s; 
s.paintGL(); 

Si vous voulez être en mesure d'appeler sans objet, vous devez soit faire fonction libre, ou une fonction membre statique:

// free 
void paintGL(); 

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

Bien sûr, cela ne fonctionne que si paintGL utilise pas de données membres Solar ...

1

initializeGL et paintGL sont les deux fonctions membres de la classe Solar, mais vous essayez ing pour les appeler comme ils sont des fonctions globales. Cela ne marchera pas.

Vous avez besoin soit une instance de 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(); 

... ou faire les fonctions fonctions membres statiques:

class Solar { 
public: 
    static void initializeGL(); 
    void resizeGL(int width, int height); 
    static void paintGL(); 
    ..... 
private: 
    ..... 
}; 

... ou (pire option de loin), faites-les fonctions globales.