在查找期间在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;
};
}
这个不再有效。智能感知报告错误:
"Error: namespace "N::std" has no member unique_ptr"
。(但不是m_blah
的声明)
…什么?为什么标准库名称空间被拉到N中?!
版本信息:
- VS2015 Community Edition (RTM) Version 14.0.23107.0 D14REL
- 开发者命令提示符报告cl版本:编译器版本19.00.23026
我今天早上启动了VS,问题自行消失了。
在尝试确保我可以隔离任何未来的问题,因为代码库是巨大的,我回到原点,看看我是否可以防止错误:
- 排除所有与问题无关的项目代码文件。
- 注释掉相关文件中与问题没有直接关系的代码。
- 在最小的上下文中重写了类(使用智能指针)。
一切顺利
相关文章:
- 命名空间中具有.h和.cpp文件的类
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 如何在鼠标挂钩过程中检测拖动
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 在查找期间在std命名空间中拖动外部命名空间