C++ 使用命名空间中变量出问题。
tex.h:
#ifndef __TEX_H__#define __TEX_H__#include <d3dx9.h>namespace Tex{ IDirect3DTexture9* Textures[7] = {0, 0, 0, 0, 0, 0, 0};// texture for each subset void createTexture(IDirect3DDevice9* Device);};#endif
#include "tex.h"void Tex::createTexture(IDirect3DDevice9* Device){ //...修改Textures[7]}
#ifndef __cubeH__#define __cubeH__#include <d3dx9.h>#include <string>#include <vector>class Cube{public: Cube(IDirect3DDevice9* device,D3DXVECTOR3 position, int tex[6]); ~Cube(); bool draw(D3DXMATRIX* world, D3DMATERIAL9* mtrl);private: IDirect3DDevice9* _device; ID3DXMesh* _mesh; static const DWORD _numSubsets; std::vector<int> _tex;};#endif //__cubeH__
#include "cube.h"#include "vertex.h"#include "tex.h"#include "d3dUtility.h"const DWORD Cube::_numSubsets = 6;//extern IDirect3DTexture9* Textures[7];Cube::Cube(IDirect3DDevice9* device,D3DXVECTOR3 position,int tex[6]){ //... //初始化成员变量,}Cube::~Cube(){ d3d::Release<ID3DXMesh*>(_mesh);}bool Cube::draw(D3DXMATRIX* world, D3DMATERIAL9* mtrl){ if( world ) _device->SetTransform(D3DTS_WORLD, world); if( mtrl ) _device->SetMaterial(mtrl); for(int i = 0; i < _numSubsets; i++) { _device->SetTexture( 0, Tex::Textures[_tex[i]] ); //此处出现问题,我想用命名空间Tex中的变量Textures,却出现重定义的问题 _mesh->DrawSubset( i ); } return true;}
#include "d3dUtility.h"#include "vertex.h"#include "cube.h"#include "camera.h"#include <iostream>#include "tex.h"bool Setup(){ //..... Tex::createTexture(Device); //.....}bool Display(float timeDelta){ if( Device ) { Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff0000ff, 1.0f, 0); Device->BeginScene(); for(int x=0;x<3;x++) { for(int y=0;y<3;y++) { for(int z=0;z<3;z++) { if(Box[x][y][z]) Box[x][y][z]->draw(&CubeWorldMatrix, 0);//调用draw } } } Device->EndScene(); Device->Present(0, 0, 0, 0); } return true;}