2010-11-28 25 views
1

J'ai ce vecteur.C++ attribuer un pointeur vectoriel

vector<CXFileEntity>* menu;// CXFileEntity is class 

Lorsque j'essaie de charger un fichier X, il y a un problème.
Voici mon code

menu->at(0)=menu->at(0).LoadXFile(CUtility::GetTheCurrentDirectory()+"\\meshes\\Menu\\background.x", 1, menu->at(0), d3dx->d3ddev); 
menu->at(1)=menu->at(1).LoadXFile(CUtility::GetTheCurrentDirectory()+"\\meshes\\Menu\\start.x", 1, menu->at(1), d3dx->d3ddev); 

Je reçois ces erreurs

Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'CXFileEntity *' (or there is no acceptable conversion) c:\users\owner\documents\visual studio 2010\projects\monopoly\monopoly\window.cpp 86 

Error 2 error C2664: 'CXFileEntity::LoadXFile' : cannot convert parameter 3 from 'CXFileEntity' to 'CXFileEntity *' c:\users\owner\documents\visual studio 2010\projects\monopoly\monopoly\window.cpp 87 

Il semble que quand j'assignant un pointeur à mon vecteur, il ne fonctionne pas l'erreur dit que CXFileEntity peut ne sera pas converti en CXFileEntity* mais je l'ai assigné pour être un pointeur.
Donc, j'ai essayé de le changer.

menu->at(0)=menu->at(0).LoadXFile(CUtility::GetTheCurrentDirectory()+"\\meshes\\Menu\\background.x", 1, &menu->at(0), d3dx->d3ddev);// added & 

mais maintenant je suis cette erreur

Error 2 error C2664: 'CXFileEntity::LoadXFile' : cannot convert parameter 3 from 'CXFileEntity' to 'CXFileEntity *' c:\users\owner\documents\visual studio 2010\projects\monopoly\monopoly\window.cpp 87 

Je suis perdu avec celui-ci .. EDIT 2:
Voici la classe CXFileEntity

#pragma once 
#include "stdafx.h" 
/* 
    This class represents an x file animation 
    It loads the .x file and carries out the animation update and rendering 
*/ 
class CXFileEntity 
{ 
private: 
    LPDIRECT3DDEVICE9 m_d3dDevice; // note: a pointer copy (not a good idea but for simplicities sake) 

    // Direct3D objects required for animation 
    LPD3DXFRAME     m_frameRoot; 
    LPD3DXANIMATIONCONTROLLER m_animController; 
    D3DXMESHCONTAINER_EXTENDED* m_firstMesh; 

    // Bone data 
    D3DXMATRIX *m_boneMatrices; 
    UINT m_maxBones; 

    // Animation variables 
    unsigned int m_currentAnimationSet; 
    unsigned int m_numAnimationSets; 
    unsigned int m_currentTrack; 
    float m_currentTime; 
    float m_speedAdjust; 

    // Bounding sphere (for camera placement) 
    D3DXVECTOR3 m_sphereCentre; 
    float m_sphereRadius; 

    std::string m_filename; 

    void UpdateFrameMatrices(const D3DXFRAME *frameBase, const D3DXMATRIX *parentMatrix); 
    void UpdateSkinnedMesh(const D3DXFRAME *frameBase); 
    void DrawFrame(LPD3DXFRAME frame) const; 
    void DrawMeshContainer(LPD3DXMESHCONTAINER meshContainerBase, LPD3DXFRAME frameBase) const; 
    void SetupBoneMatrices(D3DXFRAME_EXTENDED *pFrame/*, LPD3DXMATRIX pParentMatrix*/); 
    bool Load(const std::string &filename); 
public: 
    CXFileEntity(LPDIRECT3DDEVICE9 d3dDevice); 
    ~CXFileEntity(void); 
    mutable D3DXMATRIX m_combinedMat, * s; 
    void CreateRay(); 
    mutable LPD3DXMESH pDrawMesh; 
    bool draw; 
    float distanceToCollision; 
    BOOL hasHit; 

    CXFileEntity* LoadXFile(const std::string &filename,int startAnimation, CXFileEntity *menus, LPDIRECT3DDEVICE9 d3ddev); 
    void FrameMove(float elapsedTime,const D3DXMATRIX *matWorld); 

    void Render() const; 
    void SetAnimationSet(unsigned int index); 
    void SetComb(LPDIRECT3DDEVICE9 d3dDevice, D3DXMATRIX world); 
    float m_fHitDist; 
    CXFileEntity *m_pChild; 
    CXFileEntity *m_pSibling; 

    void NextAnimation(); 
    void AnimateFaster(); 
    void AnimateSlower(); 

    D3DXVECTOR3 GetInitialCameraPosition() const; 
    unsigned int GetCurrentAnimationSet() const {return m_currentAnimationSet;} 
    std::string GetAnimationSetName(unsigned int index); 
    std::string GetFilename() const {return m_filename;} 
}; 
+0

CXFileEntity est un type de bibliothèque? Sinon, pouvons-nous voir une définition? – Rao

Répondre

1

LoadXFile() semble renvoyer un pointeur, à savoir. CXFileEntity * alors que le vecteur accepte uniquement les objets de CXFileEntity.

Je ne comprends pas votre conception. Vous avez des instances de CXFileEntity dans votre std::vector. Ensuite, vous accédez à ces instances et appelez LoadXFile() sur eux ... qui renvoient des pointeurs vers CXFileEntity, que vous essayez de stocker dans le std::vector?

Suite à votre propre flux,

Vous devez utiliser l'opérateur de déréférencement * pour obtenir l'accès à l'objet réel que les points de pointeur pour.

menu->at(0)=*(menu->at(0).LoadXFile(CUtility::GetTheCurrentDirectory()+ 
"\\meshes\\Menu\\background.x", 1, &(menu->at(0)), d3dx->d3ddev)); 

La deuxième erreur indique que vous devez passer un pointeur vers un CXFileEntity, comme vous l'aurez deviné. Le problème était la priorité des opérateurs, vous devez donc utiliser des parenthèses appropriées.

+0

Non im essayant de faire de mon vecteur un pointeur comme CXFileEntity * – Ramilol

+0

par la façon dont vous m'avez donné travaillé – Ramilol

+0

@Rao pourquoi 'vecteur * menu; // CXFileEntity est class' menu n'est pas pointeur quand j'ai le signe du pointeur quand je le déclare. ne devrait pas être le menu être un pointeur? – Ramilol