C++ 使用命名空间中变量出问题。
时间:2011-08-27
来源:互联网
tex.h:
C/C++ code
tex.cpp:
C/C++ code
cube.h
C/C++ code
cube.cpp
C/C++ code
main.cpp:
C/C++ code
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: 找到一个或多个多重定义的符号
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28