在同一个函数中使用不同的命

Raj*_*esh 1 c++ oop namespaces function

myCout()当我在同一个函数中使用两个不同的命名空间时,为什么我得到错误消息(错误:重载的调用是不明确的)使用using namespace没有完全限定名称空间的指令?

#include <iostream>
using namespace std;

namespace first
{
     void myCout(void)
    {
        cout<<"Hello World is great\n";
    }
}

namespace second
{
     void myCout(void)
    {
        cout<<"Hello Sky is high\n";
    }
}

    int main(void)
    {

        cout<<"Hello World\n";
        using namespace first;
            myCout();

        using namespace second;
            myCout();

        return(0);
    }
Run Code Online (Sandbox Code Playgroud)

如果我myCout()在下面给出的第二个命名空间中使用完全限定的命名空间,则没有问题

int main(void)
{
    cout<<"Hello World\n";
    using namespace first;
    myCout();
    second::myCout();
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

using指令尊重范围.因此,您可以引入一个新的块作用域来限制每个符号引入的符号的可用性:

int main(void)
{
    cout<<"Hello World\n";
    {
        using namespace first;
        myCout();
    }

    {
        using namespace second;
        myCout();
    }

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

通常,为避免冲突和深度嵌套,请尝试使用using声明来提取所需的标识符.例如,如果你只想从那时开始使用类foo,first那么下面就不会有歧义:

using first::foo;
using namespace second;
Run Code Online (Sandbox Code Playgroud)