c++11 - 如何在另一个命名空间中使用一个命名空间的指针,并且两个命名空间都在另一个类中使用

标签 c++11 namespaces

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

文件1.h

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

文件2.h
namespace name2
{
    class toolbox
    {
        int fun()
        {
            return _test->test();
        }
    }
}

新文件.cpp
using namespace name1;
using namespace name2;

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

以上我会得到错误:
对 name2::_test 的 undefined reference

如果我在 name2 添加 extern 我得到错误:
_test 模棱两可

最佳答案

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

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

或者,可以通过以下方式有选择地使用命名空间中的元素:using NS::Identifier .但是,我从来没有发现自己处于需要全局的情况,所以不知道这是否有效。

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

关于c++11 - 如何在另一个命名空间中使用一个命名空间的指针,并且两个命名空间都在另一个类中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51719786/

相关文章:

c++ - 为什么 std::make_tuple(7 + N...) 在 C++11 中是合法的?

c++ - std::atomic_thread_fence 具有 undefined reference

c++ - 我如何在 Mac 上构建 gcc?

c++ - OpenMP:如何处理全局标准 vector 上的竞争条件

c++ - C/C++ 使用 libxml 将命名空间添加到子元素而不是根元素

PHP命名空间困惑,找不到类

c++ - 引入右值引用真的有用吗?

php - 使用 PHP 中的动态命名空间前缀解析 XML 元素

c# - 从 xml 中删除 q1 和所有命名空间

javascript - 这是防止 JavaScript 中命名空间污染的好方法吗?