CHMOD0777 2024-01-17 21:38 采纳率: 0%
浏览 13

C++使用内联变量结合智能指针实现单例模式

C++使用内联变量结合智能指针实现单例模式时遇到这样的问题,有哪位高人知道为啥吗?

#include <iostream>
#include <memory>
#pragma warning(disable : 4996)

class MyClass
{
public:

    ~MyClass()
    {

    }
    MyClass()
    {

    }

private:
    static inline  std::shared_ptr<MyClass> ptr{new MyClass };// error C2027: use of undefined type 'MyClass'
};

然而这样写就没有问题:

#include <iostream>
#include <memory>
#pragma warning(disable : 4996)

class MyClass
{
public:

    ~MyClass()
    {

    }
    MyClass()
    {

    }

private:
    static inline  std::shared_ptr<MyClass> ptr{ std::make_shared<MyClass>()};
};
  • 写回答

3条回答 默认 最新

  • flower980323 2024-01-18 10:28
    关注

    这里跟C++17和内联都没啥关系
    在类定义完之前不能使用不完整的类类型,只能使用指针或引用

    img

    new MyClass的时候,MyClass还没有定义完,编译器不知道他占多大存储空间,所以识别就报错了
    std::make_shared使用MyClass的时候只是作为模板参数类型,识别能通过,类似于图里的S作为智能指针的参数类型

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月17日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,