gpt4 book ai didi

c++ - header 防护/翻译单元问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:27 26 4
gpt4 key购买 nike

我的印象是 header guards 解决了重新定义的问题。我收到链接器错误,指出 .obj 文件中存在重新定义。这是我包含的 header ,问题在于所有全局声明的重新定义。

#ifndef DIRECT3D_H
#define DIRECT3D_H

// global declarations
ID3D10Device* device;
ID3D10Buffer* pBuffer;
ID3D10Buffer* iBuffer; // the pointer to the index buffer
ID3D10RenderTargetView* rtv; // the pointer to the render target view
ID3D10DepthStencilView* dsv; // the pointer to the depth stencil view
IDXGISwapChain* swapchain; // the pointer to the swap chain class
ID3D10Effect* pEffect;
ID3D10EffectTechnique* pTechnique;
ID3D10EffectPass* pPass;
ID3D10InputLayout* pVertexLayout;
ID3D10EffectMatrixVariable* pTransform; // the pointer to the effect variable interface
D3D10_PASS_DESC PassDesc;

// function prototypes
void initD3D(HWND hWnd);
void render_frame();
void init_pipeline();
void cleanD3D();
void Init();

#endif

说这个头文件叫做 3DClass.h。它包含在 3DClass.cpp 中。它也包含在另一个文件中——一个主游戏循环。现在,我意识到当有多个翻译单元时头文件可能会出现问题,但我不太明白为什么这不起作用,我只在一个文件和相应的源文件中包含头文件.这不应该没事吗?

最佳答案

Header guards 解决了两次包含相同的 header 或包含的隐藏递归问题,而不是双重定义。

如果您在不同的翻译单元中包含相同的 header , header 保护将无济于事。

解决方案是永远不要在头文件中声明变量。如果需要共享变量,请在 header 中使用 extern 关键字,并在一个 翻译单元中声明实际变量。

关于c++ - header 防护/翻译单元问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7566034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com