命名空间与函数同名

时间:2010-07-13 08:08:40

标签: c++ namespaces

我在标题中有这个:

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。

2 个答案:

答案 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,您无法隐藏它。