1

我正在尝试下面的代码,在函数中使用多个命名空间(更改命名空间)。我不确定出了什么问题,我什至不确定我是否可以像下面这样使用,但是在我的简短浏览中没有发现任何矛盾的证据,请让我知道出了什么问题:

#include <iostream>
using namespace std;

namespace standard_one
{
        int i = 10;
}

namespace standard_two
{
        int i = 40;
}


main()
{
        using namespace standard_one;
        cout << "value of i is " << i << endl;

        {
                using namespace standard_two;
                cout << "value of i after namespace change is " << i << endl; // Compilation error here, compiler is complaining that "i" is undeclared
        }
}
4

3 回答 3

2

这不是未声明,它是模棱两可的。这两个using指令都适用于内部作用域,因此两个is 都被引入了作用域。如果没有完全限定名称,编译器就无法知道您指的是哪一个。

您可以使用完全限定名称并说出standard_one::istandard_two::i来解决歧义。

题外话:

   int main() {
// ^^^ !!!
于 2013-06-27T12:10:27.017 回答
0

像这样试试。它的范围不正确

main()
{
        cout << "value of i is " << standard_one::i << endl;
        {
                cout << "value of i after namespace change is " << standard_two::i << endl;
        }
}
于 2013-06-27T12:09:54.530 回答
0

您必须限制using namespace standard_one语句的范围,就像您限制using namespace standard_two.

int main()
{
        {
            using namespace standard_one;
            cout << "value of i is " << i << endl;
        }
        {
            using namespace standard_two;
            cout << "value of i after namespace change is " << i << endl; // Compilation error here, compiler is complaining that "i" is undeclared
        }
}

另外,不要忘记将main()return设为int.

于 2013-06-27T12:14:52.987 回答