c++ - 在查找期间将外部命名空间拖入 std 命名空间

标签 c++ c++11 namespaces c++14 namespace-organisation

我目前正在重构一些旧代码以满足 C++14 的正确性标准,但发生了一些奇怪的事情。

这个错误到目前为止是独一无二的,没有出现在代码的其余部分。我混淆了实际类型,因为它们并不重要。

重构之前,以下代码工作正常:

namespace N {
    class A {
    public:
        A(B* blah) : _blah(blah); //class A owns the instance of class B.
        ~A() { delete m_blah; m_blah = nullptr; }
        //...Lots more code.
    private:
        B* m_blah;
    };
}

我将任何必要的基于所有权的指针更改为它们各自的智能指针:

#include <memory>

namespace N {
    class A {
    public:
        A(std::unique_ptr<B> blah);
        ~A() { /* DO NOTHING */ }
    private:
        std::unique_ptr<B> m_blah;
    };
}

这不再有效。 Intellisense 报告错误:

“错误:命名空间“N::std”没有成员 unique_ptr”

在构造函数声明中。 (但不是 m_blah 的声明)

....什么?为什么标准库命名空间被拉入N?!

版本信息:

  • VS2015 社区版 (RTM) 版本 14.0.23107.0 D14REL
  • 开发人员命令提示符报告 cl 版本:编译器版本 19.00.23026

最佳答案

我今天早上启动 VS,问题自行消失。

为了确保我可以隔离任何 future 的问题,并且由于代码库庞大,我回到原点看看是否可以防止错误:

  • 从项目中排除了与问题无关的所有代码文件。
  • 注释掉与问题没有直接关系的相关文件中的代码。
  • 在最小上下文中重写类(使用智能指针)。

到目前为止,还不错。

关于c++ - 在查找期间将外部命名空间拖入 std 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33194445/

相关文章:

codeigniter - 模式创建时的 Doctrine + CodeIgniter : after generate entities with namespace, "cannot redeclare class"

c++ - 调整 OpenGL 窗口的大小会导致它分崩离析

C++如何检测空格

c++ - OpenGL 函数实际上是特定于上下文的吗?

c++ - 具有自定义数据结构的 C++ 中的运算符<<

c++ - C++ 中安全异步回调的模式

android - 带有 utf8 字符的 jstring(JNI) 到 std::string(c++)

c++ - 遍历文本文件并为每一行分配变量

c++ - 使用 make 编译 MPI,出现几个命名空间错误,例如 "error: unknown type name ‘using’?

xml - 跨命名空间的 XSL 转换