在查找期间将外部命名空间拖入 std 命名空间
Outer namespace dragging in std namespace during lookup
我目前正在重构一些旧代码以满足 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 报告错误:
"Error: namespace "N::std" has no member unique_ptr"
在构造函数声明中。 (但不是 m_blah
的声明)
..什么?为什么标准库命名空间被拉入N?!
版本信息:
- VS2015 社区版 (RTM) 版本 14.0.23107.0 D14REL
- 开发人员命令提示符报告 cl 版本:编译器版本 19.00.23026
今天早上我启动了 VS,问题自行消失了。
为了确保我可以隔离任何未来的问题,并且由于代码库很大,我回到第一个问题,看看是否可以防止错误:
- 已从与问题无关的项目中排除所有代码文件。
- 注释掉了与问题没有直接关系的相关文件中的代码。
- 在最小上下文中重写了 class(使用智能指针)。
到目前为止,还不错。
我目前正在重构一些旧代码以满足 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 报告错误:
"Error: namespace "N::std" has no member unique_ptr"
在构造函数声明中。 (但不是 m_blah
的声明)
..什么?为什么标准库命名空间被拉入N?!
版本信息:
- VS2015 社区版 (RTM) 版本 14.0.23107.0 D14REL
- 开发人员命令提示符报告 cl 版本:编译器版本 19.00.23026
今天早上我启动了 VS,问题自行消失了。
为了确保我可以隔离任何未来的问题,并且由于代码库很大,我回到第一个问题,看看是否可以防止错误:
- 已从与问题无关的项目中排除所有代码文件。
- 注释掉了与问题没有直接关系的相关文件中的代码。
- 在最小上下文中重写了 class(使用智能指针)。
到目前为止,还不错。