我在标题中有这个:
double commonFunction( ... )
{ /*...*/ }
namespace F2
{
double impactFactor( ... )
{ /*...*/ }
double func( ... )
{ /*...*/ }
double F2( ... )
{ /*...*/ }
}
namespace FL
{
double impactFactor( ... )
{ /*...*/ }
double func( ... )
{ /*...*/ }
double FL( ... )
{ /*...*/ }
}
我想从全局命名空间访问F2和FL函数。我尝试将其添加到标题的末尾(或者在包含之后,无关紧要):
using F2::F2;
using FL::FL;
我确信当函数名称与命名空间名称不同时,这可行,但为什么这不起作用,我该如何解决?感谢
PS:我不能将这些函数放在它们的命名空间之外,因为这会导致重新定义的符号(F2和FL,作为命名空间和函数)。
更新:对于那些诅咒我的人,这就是我的所作所为。由于这是一个科学的公式标题,并且很难找到一个好的短命名空间名称,我命名了名称空间F2和FL以及函数本身f2和fL。
答案 0 :(得分:6)
因为,using
将具有给定名称的每个声明带入范围,因此如果您已经有两个或更多具有一个名称的声明(在本例中为namespace f1
),则会抱怨。
并且它与命名空间的名称和功能无关。 即使这样也会产生同样的错误:
namespace foo
{
void not_foo(){};
}
namespace not_foo
{
void foo(){}
}
using not_foo::foo;
答案 1 :(得分:1)
您的问题是“如何从全局命名空间访问F2和FL函数。”
这有点模棱两可,因为它可以被解释为“如何访问在全局命名空间中定义的F2和FL函数”。但是从代码中,我认为你的意思是“如何从全局命名空间中的代码访问:: F2 :: F2和:: FL :: FL函数”
我想知道你遇到了什么错误。另外,实际的论点是什么?没有它,我只能猜测。我建议将using
声明更改为using ::FL::FL
。但是,全局命名空间中FL
的名称查找将找到namespace FL
,您无法隐藏它。