首页 > 解决方案 > 当同一个命名空间中有两个具有相同签名的函数时会发生什么?

问题描述

据我了解,我可以使用命名空间来避免函数相互覆盖。但是如果命名空间有相同的名称呢?

我在下面包含了两个名为 VideoLibrary::check() 的 .h 文件,它可以编译。为什么?这不与命名空间的目的相矛盾吗?

文件 1.h 和文件 2.h:

namespace VideoLibrary
{
  void check();
}

文件 1.cpp:

namespace VideoLibrary
{
  void check()
    {
        printf("check1");
    }
}

文件 2.cpp:

namespace VideoLibrary
{
  void check()
    {
        printf("check2");
    }
}

我担心主要是因为我的项目包含外部库,我担心它包含与我的项目具有相同签名的函数。对于这种情况,如何在编译时得到任何错误?如果重要的话,我会使用 Xcode 作为编辑器。

标签: c++xcodenamespaces

解决方案


如果您在不同的翻译单元中有相同函数的 2 个(非内联)定义,则您有一个 ODR(一个定义规则)违反 NDR(无诊断要求)。


推荐阅读