读书人

C++ 使用命名空间中变量出有关问题

发布时间: 2012-02-09 18:22:27 作者: rapoo

C++ 使用命名空间中变量出问题。
tex.h:

C/C++ code
#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

tex.cpp:
C/C++ code
#include "tex.h"void Tex::createTexture(IDirect3DDevice9* Device){   //...修改Textures[7]}


cube.h
C/C++ code
#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__

cube.cpp
C/C++ code
#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;}

main.cpp:
C/C++ code
#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;}


1>正在链接...
1>main.obj : error LNK2005: "struct IDirect3DTexture9 * * Tex::Textures" (?Textures@Tex@@3PAPAUIDirect3DTexture9@@A) 已经在 cube.obj 中定义
1>tex.obj : error LNK2005: "struct IDirect3DTexture9 * * Tex::Textures" (?Textures@Tex@@3PAPAUIDirect3DTexture9@@A) 已经在 cube.obj 中定义
1>D:\project\D3DTest\Release\D3DTest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号


[解决办法]
重复定义了呢
[解决办法]
在不同的编译器里 可能不支持 namespace 就会出现上述错误 ,还有种情况就是楼上师兄说的这种

读书人网 >网络游戏

热点推荐