【问题标题】:How to get around not being able to use using namespace std; in C++如何解决无法使用 using namespace std;在 C++ 中
【发布时间】:2012-06-11 19:43:30
【问题描述】:

我在尝试将我的 C++ 源代码从 HP-UX 移植到 Linux 时遇到了这个问题。当我尝试在 Linux 上编译 C++ 源代码时,它会抱怨组件(来自标准 C++ 库)不存在。使用命名空间std放置行;在源代码的顶部似乎解决了这个问题。当我尝试在 HP-UX 上重新编译代码时,aCC 编译器抱怨这里只有命名空间名称是有效的(它不认为 std 是一个有效的命名空间)。我想知道是否有办法解决这个问题,以便源代码与 HP-UX 长期弃用的 C++ 编译器和 LINUX 的 GCC 编译器二进制兼容。

【问题讨论】:

    标签: c++ linux gcc hp-ux


    【解决方案1】:

    这很糟糕,但你可以这样做:

    #ifndef __HP_aCC
    using namespace std;
    #endif
    

    here定义,我没办法验证。

    【讨论】:

    • 谢谢。该程序现在与 aCC 和 GCC 二进制兼容! :)
    【解决方案2】:

    您可以使用预处理器来检查操作系统以及是否包含namespace std;因此,如果您的操作系统不是 HP aCC,则它不包含 std,否则它包含。像这样:

    #ifndef __HP_aCC
    using namespace std;
    #endif
    

    或者如果你想检查 linux 和 win 并且只使用命名空间 std,如果它是那些操作系统;你也可以这样做:

    #if defined(WIN32) || defined(LINUX)
    using namespace std;
    #endif
    

    希望有所帮助!

    【讨论】:

      【解决方案3】:

      如果你真的不想要#ifdef's,你应该可以这样做:

      namespace std {}
      using namespace std;
      

      即创建或扩展std 命名空间。在 Linux 上,它将扩展,而在 HP-UX 上,它将创建。无论哪种情况,using 都是有效的。

      但是,如果 HP-UX 编译器和你说的一样旧,那么包含 C++ 头文件的源代码很可能是旧样式:

      #include <iostream.h>
      

      而不是现代风格:

      #include <iostream>
      

      如果您对此问题有解决方案,那么您可能在代码中的某个地方使用了条件编译。如果您已经将此类特定于平台的决策本地化到代码中的一个位置,那么就可以在该位置添加代码,只为那些需要它的平台执行using namespace std

      【讨论】:

        【解决方案4】:
        1. 确保包含正确的标题。 C++ 没有定义哪些标准头文件可能包含其他标准头文件,因此当您使用间接包含时,实现的行为会有所不同。因此,只需验证您需要包含的所有内容直接

        2. 不要使用using namespace std;,只需完全限定您使用的名称,或使用using 声明来调用您需要的特定组件。

            using std::string;
          
            string s; // no need for using namespace std
          

        【讨论】:

          【解决方案5】:

          您可以使用LINUXWIN32 等特定于平台的常量来添加或不添加using namespace std 行。执行此操作的常用方法是制作(或者更常见的是生成)config.h 文件,为您使用的特定于平台的类型名称定义别名。

          【讨论】:

            猜你喜欢
            • 2016-02-27
            • 2011-09-22
            • 1970-01-01
            • 1970-01-01
            • 2011-10-14
            • 1970-01-01
            • 2018-07-03
            • 2017-04-20
            • 1970-01-01
            相关资源
            最近更新 更多