use*_*861 4 c++ boost shared-ptr
我有一个类可以保存shared_ptr到另一个类.我收到一个编译错误,shared_ptr声明"没有使用此类型定义的成员".我复制此代码的代码很短:
#include <iostream>
#include <boost/shared_ptr.hpp>
class MyClassImpl
{
};
class MyClass
{
public:
boost::shared_ptr<MyClassImpl> _sptr;
//error C2208: 'boost::shared_ptr<T>' : no members defined using this type
};
int main()
{
MyClass mc;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我是带有Boost 1.54的Visual Studio Professional 2010.
您的代码中没有错误:它是(惊讶)Microsoft编译器中的错误.显然_sptr是某种神奇的标识符.更改名称,它将正确编译(在Rextester现场直播).
struct A {
int _sptr;
};
int main()
{}
Run Code Online (Sandbox Code Playgroud)
这个答案意味着双方_sptr并_uptr在Visual C++这样的效果,我一直没能找到一个权威来源.
Microsoft 确实记录了一个实现修饰符的扩展,__sptr并__uptr在将32位指针类型转换为64位指针类型时执行了一些魔术.我假设编译器正在处理_sptr和和._uptr一样.我已经在Connect上提交了这个Bug#882592.__sptr__uptr
微软的回应:
我们同意编译器不允许使用这些特定标识符是不幸的,但由于架构原因,在我们当前的实现中修复此错误是成本过高的.在此期间,请使用变量的其他名称解决此问题.
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |