【问题标题】:Can two headers contain indentically named classes in C++?两个头文件可以包含 C++ 中相同命名的类吗?
【发布时间】:2011-05-07 12:36:48
【问题描述】:

如果它们位于不同的命名空间中,它们是否都包含在一个项目中?由于重复,我只是将它们包括在内时遇到了问题......

【问题讨论】:

  • 如果它们在不同的命名空间中,包含它们应该没有问题,您可以粘贴一些代码吗?
  • 如果您在包含它们时遇到问题,请不要将包含它们的目录添加到您的包含路径中,而是将这些目录的父目录添加到您的包含路径中。这样,您可以在 #include 语句中指定包含目录,它将区分它们。

标签: c++ class header include


【解决方案1】:

是和不是。

namespace1 中的类Foo 的名称是“namespace1::Foo”

namespace2 中的类 Foo 的名称是“namespace2::Foo”

这些名称不相同 - 您不能在不同的命名空间中拥有两个名称相同的类。

显然,两者都有一个本地名称“Foo”,如果你做类似的事情

using namespace namespace1;
using namespace namespace2;

Foo x;

那么就会有歧义,因为您已经告诉编译器忽略名称的不同位。

但只要你不将两者都纳入范围,你可以使用全名来随意使用它们中的任何一个。

【讨论】:

    【解决方案2】:

    是的,如果它们位于不同的命名空间中,它们实际上并不具有相同的名称。

    向我们展示您的标题和 CPP 文件,但请缩写它们!

    【讨论】:

      【解决方案3】:

      是的,如果它们位于不同的命名空间中,则不要在第三个位置同时使用它们。您确定问题与名称有关,而不是与循环引用有关吗?

      【讨论】:

        【解决方案4】:

        只要这两个类位于不同的命名空间中,您就可以将它们包含在同一个文件中而不会出现问题。只有当 C++ 找到两个具有相同完全限定名称的类定义并且完全限定名称包含命名空间时,C++ 才会报错。

        您的问题可能在其他地方...如上所述,发布代码将使人们更容易诊断问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-28
          • 1970-01-01
          • 1970-01-01
          • 2011-10-16
          • 2016-05-23
          • 1970-01-01
          相关资源
          最近更新 更多