【发布时间】:2011-03-15 04:41:11
【问题描述】:
我在标题中有这个:
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。
【问题讨论】:
-
您可以通过使用正确的名称来解决此问题。 IME 最好的命名空间名称是名词,最好的函数名称是动词。对于英语,这仍然为冲突留下了空间,但它们要少得多。
-
using 将名称带入作用域,因此如果您在当前作用域中有任何使用该名称的东西,编译器会抱怨。因此,这意味着如果您在当前上下文中定义名称为 F2 的 int,则将您的命名空间名称更改为 F_INFINITE 将给您同样的错误。
-
同样,这与命名空间和函数名同名无关,只是它们的声明恰好在同一范围内。
-
@Gollum:如果函数名 != 命名空间名,我想要的会起作用,问题实际上是由它们具有相同的名称引起的(因为 using 语句!)
-
@rubenvb :它必须有效,因为在这种情况下,您没有两个具有相同名称的符号。命名空间名称和函数名称之间的冲突在同一范围内,如果您更改其中任何一个,它应该可以工作。
标签: c++ namespaces