[英]C++ assign vector pointer
我有這個向量。
vector<CXFileEntity>* menu;// CXFileEntity is class
當我嘗試將x文件加載到其中時,出現了問題。
這是我的代碼
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);
我得到這些錯誤
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
無法轉換為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;}
};
LoadXFile()
似乎正在返回一個指針,即。 CXFileEntity *
而向量僅接受CXFileEntity的對象。
我不明白你的設計。 您的std::vector
有CXFileEntity
實例。 然后,您訪問這些實例並在它們上調用LoadXFile()
...這將返回指向CXFileEntity
指針,您正在嘗試將其存儲回std::vector
?
按照自己的流程,
您需要使用解引用運算符*
來訪問指針所指向的實際對象。
menu->at(0)=*(menu->at(0).LoadXFile(CUtility::GetTheCurrentDirectory()+
"\\meshes\\Menu\\background.x", 1, &(menu->at(0)), d3dx->d3ddev));
第二個錯誤表明您需要傳遞一個指向CXFileEntity
的指針。 問題是運算符優先級,因此您需要使用適當的括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.