IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

problème de passation d'attribut


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut problème de passation d'attribut
    Bonsoir,
    j'ai un problème, en écrivant ce code :

    dans une classe j'ai entré ceçi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        BspApplication::BspApplication(p_SceneManager);
        BspApplication::createScene(p_Camera,p_SceneManager);
    voilà l'erreur que le compileur me donne :

    C:\*\Client.cpp: In member function `virtual bool Client::setup()':
    C:\*\Client.cpp:228: error: no matching function for call to `BspApplication::createScene(Ogre::Camera*&, BspApplication&)'
    C:\*\Environment.h:64: note: candidates are: void BspApplication::createScene(Ogre::Camera*, Ogre::SceneManager*)


    je peux pour résoudre ce problème fusionner les deux méthodes (le constructeur de BspApplication avec createScene) dans quel cas je remplace le code çi-dessus s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BspApplication::BspApplication(p_SceneManager,p_Camera);
    tout se passe impec.

    je mets ici le code de la classe qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    class BspApplication
    {
    public:
    	BspApplication(Ogre::SceneManager*mSceneMgr = 0)
    	{
    	   setupResources();
     
    	   loadResources(mSceneMgr);
    	}
     
    protected:
     
    	String mQuakePk3;
    	String mQuakeLevel;
     
     
    void loadResources(Ogre::SceneManager*mSceneMgr = 0)
    	{
     
     
     
    		ResourceGroupManager::getSingleton().linkWorldGeometryToResourceGroup(ResourceGroupManager::getSingleton().getWorldResourceGroupName(),mQuakeLevel, mSceneMgr);
     
     
    		ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
    		ResourceGroupManager::getSingleton().loadResourceGroup(ResourceGroupManager::getSingleton().getWorldResourceGroupName(),false, true);
     
    	}
     
     
    void setupResources(void)
    	{
     
     
    		ConfigFile cf;
     
    		cf.load("quake3settings.cfg");
     
    		mQuakePk3 = cf.getSetting("Pak0Location");
    		mQuakeLevel = cf.getSetting("Map");
     
     
    		ResourceGroupManager::getSingleton().addResourceLocation(mQuakePk3, "Zip", ResourceGroupManager::getSingleton().getWorldResourceGroupName(), true);
     
    	}
     
     
    	void createScene(Ogre::Camera* mCamera = 0,Ogre::SceneManager*mSceneMgr = 0)
    	{
     
    		mCamera->setNearClipDistance(4);
    		mCamera->setFarClipDistance(4000);
     
    		ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true);
    		mCamera->setPosition(vp.position);
    		mCamera->pitch(Degree(90)); 
    		mCamera->rotate(vp.orientation);
     
    		mCamera->setFixedYawAxis(true, Vector3::UNIT_Z);
     
     
    	}
     
    };
    Je cherche à comprendre pourquoi j'ai cette erreur, je ne vois où je modifie le type de mon attribut p_SceneManager. Si quelqu'un pouvait m'éclairer...

    Merci,

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Si tu veux juste créer une instance d'objet de type BspApplication, il *suffit* de déclarer une variable de ce type, et de lui fournir les éléments requis par le constructeur...

    Cela se fait sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BspApplication monapp(p_SceneManager); /* en estimant que p_SceneManager
                                            * est un pointeur sur un type 
                                            * ogre::SceneManager
                                            */
    /* cela te dira sans doute que createScene n'est pas accessible (car
    protected) mais tu l'utilisera alors sous la forme de */
    monapp.createScene(p_Camera,p_SceneManager);
    /* ou sous une forme dynamique du genre de (meme remarque) */
    BspApplication *monapp=new BspApplication(p_SceneManager);
    monapp->createScene(p_Camera,p_SceneManager);
    [EDIT] car je ne répondais qu'à une erreur *grossiere* sans rapport avec ta question...

    Le compilateur t'indique ce qui ne va pas, et va meme jusqu'à te dire ce qu'il peut considérer comme juste:

    Il te dit, en gros, qu'il ne trouve aucune fonction membre nommée createScene(Ogre::Camera*&, BspApplication&)...

    Par contre, il se contenterait tres bien, pour appeler cette fonction, que tu lui fournisse , comme premier argument, un pointeur de type Ogre::camera* et, comme second argument un pointeur de type Ogre::SceneManager*...

    Visiblement, tu a réussi à transformer ton pointeur de type Ogre::camera en une référence sur pointeur de type Ogre::camera et passé ton instance BspApplication au lieu du pointeur sur Ogre::SceneManager
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut
    on va mettre ça sur le compte de la fatigue...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        BspApplication *ododo = new BspApplication(p_SceneManager);
        ododo->BspApplication::createScene(p_Camera,p_SceneManager);
    et dans la classe que j'ai posté au début, j'avais mis des méthodes en protected...

    merci de ton poste, il m'a mit la puce à l'oreille...

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    C'est déjà pas mal...

    Mais ma question reste posée: pourquoi utiliser l'indicateur de portée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* pourquoi */
    BspApplication *ododo = new BspApplication(p_SceneManager);
    ododo->BspApplication::createScene(p_Camera,p_SceneManager);
    /* là ou  */
    BspApplication *ododo = new BspApplication(p_SceneManager);
    ododo->createScene(p_Camera,p_SceneManager);
    /*suffirait amplement ??? */
    Apres tout, dés le moment ou tu crée une instance d'une classe, tu peux accéder à ses méthodes publiques
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut
    - j'avais pas vu que t'avais edité ton code... lol.

    - pour répondre à ta question sur l'indicateur de portée, c'est tout simplement une erreur d'inattention et comme le compileur ne l'a pas souligné...

    encore merci et je vais...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] Problème de récuperation d'attribut
    Par mitchb dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/08/2007, 12h43
  2. Réponses: 1
    Dernier message: 07/05/2007, 16h12
  3. Problème d'acces aux attributs
    Par parano dans le forum C++
    Réponses: 3
    Dernier message: 16/03/2007, 16h29
  4. Problème d'utilisation des attributs width et height avec une image distante
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/09/2006, 15h40
  5. [xml/xsl] Problème de noeuds et attributs
    Par Avallach dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/01/2006, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo