+ -
当前位置:首页 → 问答吧 → C++ 使用命名空间中变量出问题。

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

时间:2011-08-27

来源:互联网

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: 找到一个或多个多重定义的符号

作者: huangzeyy   发布时间: 2011-08-27

重复定义了呢

作者: ilysony   发布时间: 2011-08-30