查找过程中外部命名空间拖入std命名空间

3
我目前正在重构一些旧代码,以符合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

你有没有 #include <memory> - R Sahu
你展示的代码可以自行编译(可参见http://rextester.com/QAH22950),同时也可以在VS2015上编译(可参见http://webcompiler.cloudapp.net/,但无法获取永久链接)。问题肯定出在你未展示的代码中。 - Igor Tandetnik
你在 namespace N 块内是否包含了头文件? - T.C.
@T.C. 没有,我还没有。 - Casey
1个回答

0

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

为了确保我能够隔离任何未来的问题,并且由于代码库非常庞大,我回到了起点,看看是否可以防止错误:

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

到目前为止,一切都很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接