请看如下代码:
namespace myabs
{
void abs( int x )
{
::printf( "myabs\n" );
}
}void func( void )
{
using namespace myabs;
abs( -1 );//这里编译出现ambiguity
         //myabs::abs( -1 );//如果换成此句就可以,为什么?
}
void main( void )
{
int i;
func( );
         i = ::abs( -1 );
printf( "%d", i );
}哪位解释一下,用namespace不就是用来解决ambiguity的么,怎么用using namespace反倒有ambiguity了那

解决方案 »

  1.   

    using namespace myabs;
    abs( -1 );//这里编译出现ambiguity
    这里不只有myabs;;abs可见。
    std也可见了。
      

  2.   

    出现ambiguity是因为你包括了<stdlib.h>或者<math.h>,在这两个头文件中也定义了一个函数叫abs。
    using namespace myabs这条语句的意思是把myabs这个namespace当成全局的来进行查找。所以自然会有那个提示了。
    >>用namespace不就是用来解决ambiguity的么
    确实是这样啊,
    >>//myabs::abs( -1 );//如果换成此句就可以,为什么?
    不正说明了这一点么。
    你这么用肯定不会有ambiguity的。
      

  3.   

    名字空间的用法参看<<C++Primer>>
      

  4.   

    同时有多个namespace可见,在不同的namespace中又存在相同的函数,就会出现ambiguity
      

  5.   

    using namespace myabs;
    解决资源命名冲突,从特定的命名空间调用
      

  6.   

    using namespace 解决资源命名冲突
    在c++编程思想里讲到了
    thinking c++
      

  7.   

    superS(super慢) 的判断应该是对的,你把你的函数名abs换成别的名字试一下就知道了。
      

  8.   

    应该用 myabs::abs( -1 );名字空间不是光靠using就能使用的,在调用某一个具体关键字的时候,要指定它是属于哪一个名字空间的,指定的方法就是::符号。顺便说一下,对名字空间中函数的调用都是应该使用::限定符的,这和.h的头文件包含有很大的不同。