C++ 中共享相同名称的类和命名空间

发布于 2024-09-30 03:16:39 字数 375 浏览 5 评论 0原文

假设我在命名空间“abc”中有一个名为“foo”的类...

namespace abc {
     class foo {
         int a;
         int b;
     };
}

...然后说我在不同的命名空间中有另一个名为“abc”的类

#include "foo.h"

namespace foo {
    class abc {
        abc::a = 10;
    };
}

abc::a 不会是定义的类型,因为它会正在搜索类 abc,而不是名称空间 abc。我将如何正确引用另一个名称空间中的对象,其中其他名称空间与我所在的类具有相同的名称?

Let's say I have a class called 'foo' in namespace "abc"...

namespace abc {
     class foo {
         int a;
         int b;
     };
}

...and then say I have another class called "abc" in a different namespace

#include "foo.h"

namespace foo {
    class abc {
        abc::a = 10;
    };
}

abc::a would not be a defined type, because it would be searching class abc, not namespace abc. How would I go about properlly referencing an object in another namespace, wherein that other namespace had the same name as the class I'm in?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

洒一地阳光 2024-10-07 03:16:39

可以使用::abc::xx,即将变量或类型标识为其绝对命名空间路径。如果您不指定绝对名称,则相对名称开始在包含名称空间/类中向上移动。

You can use ::abc::xx, that is, identify the variable or type as its absolute namespace path. If you don't specify an absolute name, relative names start going upwards in the including namespaces/classes.

把人绕傻吧 2024-10-07 03:16:39

您可以使用前缀 :: 来表示从全局命名空间开始,因此在您的情况下 ::abc 将表示您的 abc 命名空间第一个代码片段。

You can use a prefix :: to denote starting from the global namespace, so in your case ::abc would denote the abc namespace from your first code snippet.

街角卖回忆 2024-10-07 03:16:39

您可以指定从 :: 开始的完全限定名称,它定义了全局命名空间,例如:

namespace abc {
   class foo {
       int a;
       int b;
   };
}

namespace foo {
  class abc {
      ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile
  };
}

You can specify a fully qualified name starting from :: which defines the global namespace, e.g.:

namespace abc {
   class foo {
       int a;
       int b;
   };
}

namespace foo {
  class abc {
      ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile
  };
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文