首页 > 解决方案 > C++ 函数被另一个 DLL 中的同名函数隐藏

问题描述

我将 C++ 代码分成 2 个库 (DLL),每个库都有一个同名的函数,尽管每个库都位于不同的命名空间中。所以在图书馆 1 中,我有类似以下的内容。

namespace LibOne
{
   void Foo(ClassOne& src); 
}

在库 2 中,我有访问 LibOne::Foo w/oa 问题的类,如下所示。

using namespace LibOne;
namespace LibTwo
{
    class MyClass
    {
        ...
        void MyFunc()
        {
            Foo(src);
        }
    }

}

然后在库 2 中,我添加了具有相同名称的附加函数。

namespace LibTwo
{
   void Foo(ClassTwo& src); 
   void Foo(ClassThree& src); 
}

现在使用 LibOne::Foo,会产生编译器错误

error C2665: 'LibOne::Foo': none of the 2 overloads could convert all the argument types

我可以通过如下更改我的代码以指定函数的全名来解决错误,但我只是想了解为什么在 LibTwo 中添加该函数似乎隐藏了 LibOne 中的函数版本?有什么办法可以防止这种情况发生吗?

LibOne::Foo(src)

标签: c++

解决方案


不,只会检查包含名称的最内层范围。Foo在 namespace中有LibTwo,所以编译器甚至没有注意到还有一个Foo导入到全局命名空间中。

通常,避免using namespace使用 ,而是更喜欢明确限定名称。LibOne::Foo


推荐阅读