如何在另一个名称空间中使用一个名称空间的指针以及两个名称空间都在另一个类中使用

时间:2018-08-07 06:00:29

标签: c++11 namespaces

下面是我们遇到问题的示例代码

file1.h

namespace name1
{
    extern name1::test* _test;
}

file2.h

namespace name2
{
    class toolbox
    {
        int fun()
        {
            return _test->test();
        }
    }
}

newfile.cpp

using namespace name1;
using namespace name2;

int newclass::new()
{
    return _test->test();
}

在上面我会得到错误:
未定义对name2 :: _ test

的引用

如果我在name2中添加extern,则会出现错误:
_test不明确

1 个答案:

答案 0 :(得分:0)

您遇到的问题是正在使用的命名空间之间的符号冲突。 这是样式指南中禁止using namespace使用的典型示例。

您可以在标识符前面加上NS::,而不是包括整个名称空间,例如:name1::_test

或者,可以使用using NS::Identifier从名称空间中有选择地使用元素。但是,我从来没有发现自己需要在全球范围内工作的情况,所以不知道这样做是否可行。

一条建议:不要使用全局变量,将指针或引用作为函数的参数传递是更容易维护的。