2010-11-28 5 views
1

私はこのベクターを持っています。C++はベクトルポインタを割り当てます

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

xファイルをロードしようとすると問題が発生します。
は、ここで私は

私が私のベクトルへのポインタを代入していたときに、それはエラーが動作しないということのようです
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 

CXFileEntityができると述べているこれらのエラーを取得する私のコード

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); 

ですCXFileEntity*に変換されますが、私はそれをポインタに割り当てました。
だから、私はそれに変更しようとしました。

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

が、今私は

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 

私はので、このいずれかで迷ってしまいました。このエラーを得た。2 編集:ここでは
は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はライブラリタイプですか?もしそうでなければ、定義を見ることができますか? – Rao

答えて

1

にありますLoadXFile()はポインタを返しているようです。 CXFileEntity *、ベクトルはCXFileEntityのオブジェクトのみを受け付けます。

デザインがわかりません。 std::vectorCXFileEntityというインスタンスがあります。次に、それらのインスタンスにアクセスし、LoadXFile()を呼び出します... の中に保存しようとしているCXFileEntityへのポインタを返しますか?あなた自身の流れに続いて

あなたはそのポインタが指す実際のオブジェクトへのアクセスを得るために、間接参照演算子*を使用する必要があります。

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

2番目のエラーは、あなたが推測として、CXFileEntityへのポインタを渡す必要があると述べています。問題は演算子の優先順位だったので、適切なかっこを使用する必要があります。

+0

私のベクトルにCXFileEntity * – Ramilol

+0

のようなポインタを作ろうとしていません – Ramilol

+0

@Raoなぜ 'vector * menu; // CXFileEntity is class 'はポインタではないポインタです。それを宣言したとき。メニューはポインタであってはいけませんか? – Ramilol

関連する問題