C++ 当同一命名空间中有两个具有相同签名的函数时会发生什么情况?

C++ 当同一命名空间中有两个具有相同签名的函数时会发生什么情况?,c++,xcode,namespaces,C++,Xcode,Namespaces,据我所知,我可以使用名称空间来避免函数相互重写。但是如果名称空间具有相同的名称呢 我包括了下面两个名为VideoLibrary::check()的.h文件,它可以编译。为什么?它是否与名称空间的目的相矛盾 file1.h和file2.h: namespace VideoLibrary { void check(); } file1.cpp: namespace VideoLibrary { void check() { printf("check1");

据我所知,我可以使用名称空间来避免函数相互重写。但是如果名称空间具有相同的名称呢

我包括了下面两个名为VideoLibrary::check()的.h文件,它可以编译。为什么?它是否与名称空间的目的相矛盾

file1.h和file2.h:

namespace VideoLibrary
{
  void check();
}
file1.cpp:

namespace VideoLibrary
{
  void check()
    {
        printf("check1");
    }
}
file2.cpp:

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

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

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

我如何在编译时获得这种情况下的任何错误如果这些函数位于单独的转换单元中,则无法“当同一命名空间中有两个具有相同签名的函数时会发生什么?”:麻烦。通常编译器错误或链接器错误取决于代码结构。@JesperJuhl如果该函数在库中定义,则很可能不会有任何错误。您可以修复
file1.cpp
,或者以正式方式回答您的问题-目前您有两个不同的函数namespaces@anastaciu不幸的是,OP没有关心他的问题,我很确定他/她在
file1.cpp
中缺了一行,因为这样问题和额外的括号才有意义