【问题标题】:struct inside #ifndef greyed out and inaccessible by other source files#ifndef 中的结构变灰,其他源文件无法访问
【发布时间】:2019-07-22 02:24:48
【问题描述】:

我在 ifndef 中有一个结构,它在 Visual Studio 中显示为灰色。它位于一个头文件中,然后包含在另一个 cpp 文件中。 cpp文件无法访问struct,会导致编译错误。

我已将 GAME_SHADER_DLL 定义添加到 Visual Studio 中项目的预处理器定义中,但运气不好。

这不是我的代码,它来自源 sdk 2013。我已经通过删除定义使代码工作,但是我不知道这会产生什么影响,因为我不知道项目中的定义做什么这么大。

// BaseVSShader.h
#ifndef GAME_SHADER_DLL

struct DrawFlashlight_dx90_Vars_t
{
    DrawFlashlight_dx90_Vars_t() 
    { 
        // set all ints to -1
        memset( this, 0xFF, sizeof(DrawFlashlight_dx90_Vars_t) ); 
        // set all bools to a default value.
        m_bBump = false;
        m_bLightmappedGeneric = false;
        m_bWorldVertexTransition = false;
        m_bTeeth = false;
        m_bSSBump = false;
        m_fSeamlessScale = 0.0;
    }
    bool m_bBump;
    bool m_bLightmappedGeneric;
    bool m_bWorldVertexTransition;
    bool m_bTeeth;
    int m_nBumpmapVar;
    int m_nBumpmapFrame;
    int m_nBumpTransform;
    int m_nFlashlightTextureVar;
    int m_nFlashlightTextureFrameVar;
    int m_nBaseTexture2Var;
    int m_nBaseTexture2FrameVar;
    int m_nBumpmap2Var;
    int m_nBumpmap2Frame;
    int m_nBump2Transform;
    int m_nDetailVar;
    int m_nDetailScale;
    int m_nDetailTextureCombineMode;
    int m_nDetailTextureBlendFactor;
    int m_nDetailTint;
    int m_nTeethForwardVar;
    int m_nTeethIllumFactorVar;
    int m_nAlphaTestReference;
    bool m_bSSBump;
    float m_fSeamlessScale;                             // 0.0 = not seamless
};
void DrawFlashlight_dx90( IMaterialVar** params, 
    IShaderDynamicAPI *pShaderAPI, IShaderShadow* pShaderShadow, DrawFlashlight_dx90_Vars_t &vars );

#endif // GAME_SHADER_DLL

// lightmappedgeneric_dx9_helper.cpp
#include "BaseVSShader.h"

// ... Further down in the file

CBaseVSShader::DrawFlashlight_dx90_Vars_t vars; // Has no member DrawFlashlight_dx90_Vars_t

【问题讨论】:

    标签: c++ visual-studio


    【解决方案1】:

    我已将定义,即 GAME_SHADER_DLL 添加到 Visual Studio 中项目的预处理器定义中

    这意味着它已定义。

    #ifndef GAME_SHADER_DLL

    如果代码没有定义,这将激活代码。

    你想要#ifdef 代替吗?

    【讨论】:

    • 如果您对某个工具有疑问,请在 文档 中查找它的行为,以提醒自己它的作用。只需几秒钟。
    • 好点,我没想到。大多数文件对此定义使用 ifndef,但其他文件使用 ifdef。这是不一致的,但现在我知道发生了什么,我可以解决这个问题。感谢您的帮助。
    【解决方案2】:

    ifndef 指令保留源文本如果宏参数定义。

    我已经添加了定义,即 GAME_SHADER_DLL

    如果您定义宏 GAME_SHADER_DLL,则该 ifndef 指令将删除文本。所以,如果你的意图是不删除它,那么你应该做相反的事情。在这种情况下,您需要确保未定义 GAME_SHADER_DLL 宏。

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 2019-03-03
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多