gpt4 book ai didi

c++ - 我的 shared_ptr 声明中有什么错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:00 24 4
gpt4 key购买 nike

我有一个类持有另一个类的shared_ptrshared_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;
}

我在这里做错了什么?我是装有 Boost 1.54 的 Visual Studio Professional 2010。

最佳答案

您的代码中没有错误:这是(令人惊讶的)Microsoft 编译器中的错误。显然 _sptr 是某种神奇的标识符。更改名称,它将正确编译 ( Live at Rextester )。

这是一个 minimal example that shows the problem :

struct A {
int _sptr;
};

int main()
{}

This answer暗示_sptr_uptr在Visual C++中都有这个效果,我没能找到权威的出处。

Microsoft 文档 an extension that implements modifiers __sptr and __uptr在将 32 位指针类型转换为 64 位指针类型时执行一些魔法。我假设编译器将 _sptr_uptr 视为与 __sptr__uptr 相同。我已经在 Connect 上以 Bug# 882592 的形式提交了这个.

微软的回应:

We agree that it is unfortunate for the compiler to disallow the use of these specific identifiers, but it is cost prohibitive to fix this bug in our current implementation due to architectural reasons. In the meantime, please work around this issue by using other names for your variables.

关于c++ - 我的 shared_ptr 声明中有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com