【问题标题】:Are namespace allowed in c++ conditional inclusions directive?c++ 条件包含指令中是否允许命名空间?
【发布时间】:2014-12-17 02:04:45
【问题描述】:

我目前在我的 c++ 项目中使用条件包含指令时遇到了这个问题。我想向社区寻求建议,看看我是否真的被允许做这样的事情。

我的伪代码如下:

BOOL myLogic(){

  #ifdef GlobalVar1
    if(MyNameSpace::CheckSomething()) //Compiler complains that 'MyNameSpace' is not a class or namespace name
    {
      MyClass myCls;
      myCls.doSomething();
    }
    else
    {
      ErrorLog(ERROR_CHECKINGSOMETHING); //Compiler complains that ERROR_CHECKINGSOMETHING as undeclared idenifier
    }
  #endif

  #ifdef GlobalVar2
    ...
  #endif
}

我声明了大约 20 个条件包含,在定义了我选择的 GlobalVar 之后,我尝试编译我的解决方案,并且在 cmets 中报告了上述两个错误。

我希望通过上述方式使用#ifdef 和#endif 找出我是否做错了什么。当我试图在我之前发布的问题中测试一位 SOF 成员的建议时:How to compile source code separately in c++。谢谢!

【问题讨论】:

  • 你是否真的包含了声明MyNameSpace::CheckSomething的头文件?
  • 这篇文章中没有足够的代码near 来确定真正出了什么问题。发布一个完整的MCVE展示您遇到的问题。
  • 我意识到错误是由于某些标头未正确包含引起的。我还包含了#ifdef 包含指令来屏蔽头文件,因为不满足包含条件,因此现在不再包含以前包含的一些必要的头文件。我通过在基类中添加必要的头文件解决了这个问题。谢谢你们的建议!

标签: c++ namespaces conditional-compilation


【解决方案1】:

我意识到错误是由于某些标头未正确包含引起的。

我还包含了#ifdef 包含指令来屏蔽头文件,因为不满足包含条件,因此现在不再包含以前包含的一些必要的头文件。

我已经通过在基类中添加必要的头文件解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-20
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2012-04-26
    相关资源
    最近更新 更多