c++ - 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)
解决方案
不,只会检查包含名称的最内层范围。Foo
在 namespace中有LibTwo
,所以编译器甚至没有注意到还有一个Foo
导入到全局命名空间中。
通常,避免using namespace
使用 ,而是更喜欢明确限定名称。LibOne::Foo
推荐阅读
- reactjs - ReactJS - 在状态和道具之间传递数据
- jmeter - 在非 GUI 模式下运行时,JMeter 结果日志不包括父样本,我需要父样本
- zabbix - 添加或更改在 docker 中执行的 zabbiz 的语言
- c# - 使用数组输出 0-10000 的所有素数
- airflow - 如何跳过 Airflow 上的任务?
- c# - 使用 Assert.Ignore 跳过测试用例时无法添加消息
- cron - 在每月的第 5 个工作日启动 cron 并在之后每天运行
- emacs - (emacs)在矩形中插入换行符
- prestashop - 如何在 Prestashop 1.7 的自定义控制器中使用 seo 友好的 URL
- html - 在 CSS 中缩放后调整容器大小